为什么socket.io现在使用express.io ??
给出500(内部服务器错误)客户方:
$(document).ready(function(){
$.getScript("http://www.mysite.com:8000/socket.io/socket.io.js",function(){
var socket = io.connect('http://www.mysite.com:8000'); //<<--error
socket.emit('ready');
});});
服务器端:
var express = require('express.io')
, engine = express().http().io();
engine.use(express.cookieParser());
engine.use(express.session({secret:'monkey'}));
engine.all('/',function(req,res,next){res.header("Access-Control-Allow-Origin","*");res.header("Access-Control-Allow-Headers","X-Requested-With");next();});
engine.get('/', function(req, res) {
req.session.loginDate = new Date().toString()
res.sendfile(__dirname)
});
engine.listen(8000);
engine.io.route('ready',function(socket){console.log('hellooooooooooo');});
我正在关注https://github.com/techpines/express.io上的文档,我只更改了两件事:跨域和应用程序被称为引擎。我只是看不出问题有没有其他人让这个工作?
注意:它不使用express.js它使用express.io(与socket.io更兼容)
这就像socket.io不是他们在服务器上监听的,即使是engine = express()。http()。io(); io是socket.io
答案 0 :(得分:2)
我遇到了类似的问题,但我通过复制和粘贴express.io示例代码中的代码示例来修复它,并且它有效。然后我比较它们以检查问题可能是什么,并观察到代码的顺序很重要。
此订单导致错误:
- 的静态强>
- 的 cookieParser 强>
- 的会话强>
但是当我按照示例代码中提供的代码时,我发现这个命令有效:
- 的 cookieParser 强>
- 的会话强>
- 的静态强>
希望这对你也有所帮助。
答案 1 :(得分:0)
我认为发布的示例失败了,因为您在没有提供文件名的情况下使用了呼叫res.sendfile(__dirname)
。
这是来自express.io,请注意它使用res.sendfile(__dirname + '/client.html')
:
express = require('express.io')
app = express().http().io()
// Setup your sessions, just like normal.
app.use(express.cookieParser())
app.use(express.session({secret: 'monkey'}))
// Session is automatically setup on initial request.
app.get('/', function(req, res) {
req.session.loginDate = new Date().toString()
res.sendfile(__dirname + '/client.html')
})