2

为什么 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

4

2 回答 2

2

我遇到了类似的问题,但我通过将代码示例复制并粘贴到 express.io 示例代码中来修复它,并且它有效。然后我比较了它们以检查问题可能是什么,并观察到代码的顺序很重要。

此命令导致错误:

  • 静止的
  • cookie解析器
  • 会议

但是当我按照示例代码中提供的代码进行操作时,我发现这个命令有效:

  • cookie解析器
  • 会议
  • 静止的

希望这也会对您有所帮助。

于 2013-04-30T11:02:10.287 回答
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')
})
于 2014-03-04T06:05:52.273 回答