NodeJS socket.io在路由器页面

我有app.js代码:

var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io')(server); io.on('connection', function(socket){ socket.on('newRideAdded', function(exclude){ io.emit('newRideAdded', exclude); }); console.log('a user connected'); socket.on('disconnect', function(){ console.log('user disconnected'); }); }); var bodyParser = require('body-parser'); app.use(bodyParser.json()); // support json encoded bodies app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies app.use(express.static(__dirname + '/public/')); app.use('/rides', require('./routes/rides')); app.use('/user', require('./routes/user')); server.listen("8080", function() { console.log("Connected to db and listening on port 8080"); }); 

我想将套接字io代码移动到路由器的页面。

这是路由器页面:

 var express = require('express'); var router = express.Router(); var mongojs = require('mongojs'); var db = mongojs("ride4you", []); router.post('/getRides', function(req, res, next) { db.rides.find(function(err, docs) { res.json(docs); }); }); // rest of the restapi in this page. // I want socket code to be here module.exports = router; 

正如你所看到的,我已经在每个路由器的页面中发送了每个套接字,并且在路由器页面中已经有了module.exports。

如何做呢?

谢谢。

使用Express 4,你可以使用你的app.js文件

 app.set('socketio', io); 

然后在您的路由器或控制器中,您可以使用

 router.post('/getRides', function(req, res, next) { var io = req.app.get('socketio'); io.to(//socket.id//).emit("message", data); db.rides.find(function(err, docs) { res.json(docs); }); }; 

这是传递参考的干净方式。