8

我正在运行以下 server.js:

module.exports = server;

var express = require('express');
var fs = require('fs');

var server = express.createServer();    

var port = 58000;
server.listen(port);

var io = require('socket.io').listen(server);

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

server.use(express.logger());

io.on('connection', function(client){
    console.log('new client connected ' + client);
    client.on('message', function(){
        console.log('client wants something');
    });
});

用于 /public 子文件夹中文件的简单 express.static 服务器,以及 socket.io 功能。使用此设置,对“socket.io.js”文件的任何请求都会失败,即

http://localhost:58000/socket.io/socket.io.js

返回 404 错误(未找到文件)。静态文件服务器正常工作。如果我只是使用“http”模块而不是“express”(注释掉 express.static 和 express.logger 行)socket.io.js 服务正确。如何结合这两种功能?

4

2 回答 2

3

Express 3.0.0(最新)更改了它的 API。

是一个与您的问题非常相似的问题,它提供了响应。

var express = require('express')
  , http = require('http');

var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);

...

server.listen(8000);
于 2012-04-19T16:06:21.947 回答
0

确保您拥有 express.js 和 socket.io.js 的最新版本。我这边很好用

express@2.5.8 
socket.io@0.8.5 
node@0.6.5

否则,解决方案可以是var io = require('socket.io').listen(server);在您的server.use

于 2012-04-19T15:50:31.463 回答