Node.js 路由器页面中的NodeJS socket.io
我有app.js代码:Node.js 路由器页面中的NodeJS socket.io,node.js,socket.io,node-modules,Node.js,Socket.io,Node Modules,我有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.em
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);
});
};
然后在路由器或控制器中,您可以使用
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);
});
};
这是一种传递引用的干净方法。这有点不相关,但这似乎是我见过的在express应用程序周围传递socket.io连接对象的最简单方法,它可以避免不断地将对象传递给路由等。请告诉我,而不是从客户端发出,然后在节点服务器中接收,然后在客户端重新发射和接收,您简化了这一点,现在它不再是两种方式,而是一种方式:从节点服务器发射,然后在客户端接收。对吗?我已经测试过了,效果非常好。但是有一件事,on-connection函数不起作用:io.on('connection',function(socket){socket.on('newrideded',function(exclude){也许你知道为什么吗?