Node.js:TypeError:Object socket.io没有方法'listen'

我正在使用Express 3.0.6使用socket.io 0.9.13做一个小的Node应用程序。 我什至不能开始运行,因为它说socket.io没有方法listen() 。 这里是我的代码(编译后的coffeescript,所以有点难看):

 (function() { var app, express, io, port, usernames; express = require('express'); app = express(); io = require('socket.io'.listen(3000)); port = 3000; app.listen(port); console.log("Listening on port " + port); console.log('CNTRL-C to quit.'); app.engine('hamlc', require('haml-coffee'.__express)); app.get('/', function(request, response) { return response.render('index.hamlc'); }); usernames = {}; io.sockets.on('connection', function(socket) { socket.on('send-chat', function(msg) { return io.sockets.emit('update-chat', socket.username, msg); }); socket.on('add-user', function(username) { socket.username = username; usernames[username] = username; socket.emit('update-chat', 'SERVER', "You have connected as " + username + "."); socket.broadcast.emit('update-users', 'SERVER', "" + username + " has joined the chat."); return io.sockets.emit('update-users', usernames); }); return socket.on('disconnect', function() { delete usernames[socket.username]; io.sockets.emit('update-users', usernames); return socket.broadcast.emit('update-chat', 'SERVER', "" + socket.username + " has disconnected from chat"); }); }); }).call(this); 

这引发了以下错误:

 node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ TypeError: Object socket.io has no method 'listen' at Object.<anonymous> (/Users/chris/src/web/kouv/app.js:8:28) at Object.<anonymous> (/Users/chris/src/web/kouv/app.js:44:4) at Module._compile (module.js:432:26) at Object..js (module.js:450:10) at Module.load (module.js:351:31) at Function._load (module.js:310:12) at Array.0 (module.js:470:10) at EventEmitter._tickCallback (node.js:192:40) 

回答大大赞赏。 🙂

尝试这个:

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

Socket.io在运行时本质上劫持了http对象; Express 3.xx不再运行http.server,所以有必要为socket.io创build自己的实例。