node.js - NodeJS、socketIO、多个文件

标签 node.js socket.io

我有点困惑;

我想在 NodeJS 应用程序上使用 socketIO。 我创建了这个(伪)代码:

//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 请求。我想在 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 传递给路由器?

最佳答案

你可以试试这个

//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;
);

如果您想“通知”所有连接的客户端,此解决方案将起作用。

如果您只需要通知特定的客户端,那么我会建议您使用事件发射器模块来传达这些事件,而不是在多个文件之间共享您的套接字实例。

关于node.js - NodeJS、socketIO、多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36676815/

相关文章:

node.js - Socket.io 和 Backbone

php - 如何同时使用 websocket 和推送通知

node.js - 禁用 Socket.io 中特定套接字的输出

node.js - 出现错误 : nodemon not found when running docker-compose

node.js - socket.io 未拾取子文件夹

javascript - React-Native:警告:无法对未安装的组件执行 React 状态更新

javascript - 在express js 4.4.1中压缩文件(gzip)

angularjs - 将 intern 与 systemjs 一起使用

javascript - 使用 mocha 和 selenium-webdriver js 获得有意义的堆栈跟踪

node.js - nodeclipse 调试器不会在所有断点处停止