我有以下服务器.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.io 功能。通过此设置,对"socket.io.js"文件的任何请求都会失败,即
http://localhost:58000/socket.io/socket.io.js
返回 404 错误(找不到文件)。静态文件服务器工作正常。如果我只是使用"http"模块而不是"express"(注释掉express.static和express.logger行),socket.io.js就可以正确提供服务。如何结合这两种功能?
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
否则,解决方案可能是在server.use
后致电var io = require('socket.io').listen(server);