2014-02-23 43 views
2

我想用Expressway使用Primus。 Primus作爲websockets的抽象層。我用Primus的例子很好 - 我用了一個基本的Express例子 - 工作正常。但不知何故,我可以讓他們一起工作。Primus with Express

的index.html(只是標準PRIMUS例如HTML)& primus.js在文件夾./public

下面是我在做什麼。

var express = require('express'); 
var Primus = require('primus'); 
var http = require('http'); 
var path = require('path'); 
var app = express(); 

var server = require('http').createServer(app) 
, primus = new Primus(server, { transformer: 'engine.io' }); 


app.set('port', process.env.PORT || 3000); 
app.use(express.logger('dev')); 
app.use(express.json());  // to support JSON-encoded bodies 
app.use(express.urlencoded()); // to support URL-encoded bodies 
app.use(express.methodOverride()); 

app.use(app.router); 
app.use(express.static(__dirname + '/public')); 


// development only 
if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} 

primus.on('connection', function connection(spark) { 
    console.log('new connection'); 
    spark.write({ Welcome: 'Hello!' }); 
}); 

primus.save(__dirname +'/public/primus.js'); 

/* the normal express start 
http.createServer(app).listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 
*/ 

server.listen(app.get('port'), function(){ 
    console.log('Express server listening on port ' + app.get('port')); 
}); 

輸出訪問

http://localhost:3000/index.html 


Express server listening on port 3000 
GET /index.html 200 73ms - 5.22kb 

的index.html時正確地投放。但沒有請求primus.js出現。和index.html顯示了GET primus.js

400錯誤,當我在代碼中禁用PRIMUS部分上方,然後使用普通快遞開始我得到以下輸出:

Express server listening on port 3000 
GET /index.html 200 79ms - 5.22kb 
GET /primus.js 200 69ms - 96.54kb 

因此,所有送達正確。 Prmius在客戶端工作,但當然沒有人在服務器端回答,因爲我禁用了primus。

任何想法有什麼不對?

回答

2

我認爲問題出現是因爲Primus截取了所有以/primus開頭的請求,所以Express無法爲primus.js文件服務。

我也想在你的HTML文件,你有這樣的:

<script src="/primus.js"></script> 

嘗試替換它:

<script src="/public/primus.js"></script> 

,然後替換該行:

app.use(express.static(__dirname + '/public')); 

與這一個:

app.use('/public', express.static(__dirname + '/public')); 

更新

既然我們改變靜態文件的URI,我們必須手工服務index.html

app.get('/', function(req, res) { 
    res.sendfile(__dirname + '/public/index.html'); 
}); 
+0

是的,這是 「/ PRIMUS」 的命名空間的問題是, 「primus.js」 永不得到下載。我注意到我也可以通過配置中的'pathname'選項來更改命名空間(thx指向Arnout Kazemier)。現在也可以。 – Lars

相關問題