node.js:socket.io vs express.static

我有以下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'); }); }); 

简单的express.static服务器,用于/ public子文件夹中的文件,以及socket.iofunction。 通过这个设置,对'socket.io.js'文件的任何请求都失败了

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

返回一个404错误(找不到文件)。 静态文件服务器正常工作。 如果我简单地使用'http'模块而不是'express'(注释掉express.static和express.logger行),socket.io.js被正确地服务。 我怎样才能结合这两个function?

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); 

确保你有最新版本的express.js和socket.io.js。 我的工作很好

 express@2.5.8 socket.io@0.8.5 node@0.6.5 

否则,一个解决scheme可以调用var io = require('socket.io').listen(server); 在你的server.use