我想将Primus与Express一起使用。 Primus作为websockets的抽象层。我用Primus示例很好用-我用了基本的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,服务器端当然没有人回答。
知道有什么问题吗?
最佳答案
我认为出现问题是因为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');
});