使用Express> 4.0版本的Socket.io和Node.js

我已经阅读了关于这个问题的其他一些post,但似乎没有得到正确的答案。

socket.io“开始”演练已经过时,并告诉做app.js文件中的东西。 因为Express 4.一切都是在www文件中处理的。

到目前为止这么好 – 不应该是一个大问题。

我使用以下命令在正确的项目文件夹中npm install --save socket.io

之后,我去了bin / www文件,并添加了以下代码:

 ... /** * Create HTTP server. */ var server = http.createServer(app); /** * Socket IO */ var io = require('socket.io')(server); /** * Listen on provided port, on all network interfaces. */ server.listen(port); server.on('error', onError); server.on('listening', onListening); ... 

现在我已经在www文件中需要socket.io了,我将把下面的代码添加到app.js. 由于app.js不再处理的东西,我假设也必须进入www文件:

 io.on('connection', function(socket){ console.log('a user connected'); }); 

可悲的是,我不知道如何访问www文件夹以外的variablesio。

我创build了一个应该显示所有在线用户dynamic的后端路由。 我怎样才能在这条路上访问io?

你可以把你的下面的代码从www文件放到一个单独的socketjs文件中。

代码到你的socketjs文件将会是这样的: –

 module.exports = function (io) { io.sockets.on('connection', function(socket) { //.. } } 

通过这种方式,你可以在你的www文件中导入这个socketjs文件,如下所示:

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

希望这可以帮助你。

如果由于某种原因需要访问路由器中的variablesio ,可以使用app.set

斌/ WWW:

 var io = require('socket.io')(server); app.set('io',io); 

路线/ backend.js:

 router.get('/', function(req,res,next) { console.log( req.app.get('io') ); });