我有点困惑;
我想在socketIO上使用NodeJS应用程序。我创建了以下(伪)代码:
//server.js
var app = express();
//some code...
var router = require('./app/router');
app.use(router);
var server = app.listen(appConfig.app.port, function () {
var port = server.address().port;
});
var io = require('socket.io')(server);
io.on('connection', function (client) {
console.log('Client connected...');
client.on('join', function (data) {
console.log(data);
});
});
//client.js
var socket = io.connect('http://localhost:5555');
socket.on('connect', function(data) {
socket.emit('join', 'Hello World from client');
});百事大吉。但是!
现在,我想在另一个文件中发出事件。我有路由器和邮件请求。我想在POST请求时发出事件(请求处理程序在另一个文件中)。
//router.js
router.route("/addmenu").post(function (req, res) {
menuModel.addMenu(req.body,function(data){
//I WANT EMIT HERE
res.json(data)
});
};
);我必须在启动服务器之前初始化路由器,但我必须将服务器传递给IO.如何将IO传递给路由器?
发布于 2016-04-17 13:12:24
你可以试试这个
//server.js
var app = express();
//some code...
var io;
var getIOInstance = function(){
return io;
};
var router = require('./app/router')(getIOInstance);
app.use(router);
var server = app.listen(appConfig.app.port, function () {
var port = server.address().port;
});
io = require('socket.io')(server);
io.on('connection', function (client) {
console.log('Client connected...');
client.on('join', function (data) {
console.log(data);
});
});//router.js
module.exports = function(getIOInstance){
router.route("/addmenu").post(function (req, res) {
menuModel.addMenu(req.body,function(data){
//I WANT EMIT HERE
getIOInstance().sockets.emit(...)
res.json(data)
});
};
return router;
);如果您想“通知”所有连接的客户端,此解决方案将有效。
如果您只需要通知特定的客户端,那么我将建议您使用事件发射器模块来通信这些事件,而不是在多个文件之间共享套接字实例。
https://stackoverflow.com/questions/36676815
复制相似问题