【问题标题】:NodeJS, websocket, and module.exportNodeJS、websocket 和 module.export
【发布时间】:2015-05-01 15:33:15
【问题描述】:

我有一个 server.js 文件。

在里面,我定义了我的路线。

// routes
var mainRoutes   = require('./routes/main.js')(app, express);
var apiRoutes    = require('./routes/api.js')(app, express);
var socketRoutes = require('./routes/socket.js');

app.use('/', mainRoutes);
app.use('/api', apiRoutes);

// socket.io communication
io.sockets.on('connection', socketRoutes);

我的 socket.js 文件看起来像这样:

module.exports = function (socket) {

    console.log('user connected');

    socket.on('myEvent', function(data) {
        // whatever ...
    });
}

在这个函数中,我可以捕获事件并发送一些。 但我需要在某个时候向每个人发送消息。假设我收到“myEvent”事件。

所以基本上,我想做:

io.sockets.emit('messageForEveryone', "This is a test");

但在这里,我只能处理“套接字”参数,我猜它只适用于 1 个人。

我想将 io 从 server.js 传递给 socket.js。

我试过了(在 server.js 中):

var socketRoutes = require('./routes/socket.js', io);

那(在 socket.js 中):

module.exports = function (io, socket)

显然,它不起作用。我什至不明白 socket 参数是从哪里来的。

问题:当我在 sockets.js 文件的 module.export 中时,如何处理 io 对象?

非常感谢任何帮助,我对所有这些都是新手。

谢谢!

【问题讨论】:

    标签: javascript node.js websocket


    【解决方案1】:

    由于您只想向所有客户端发出,而不是将io 传递给socketRoutes,您可以简单地执行此操作。

    module.exports = function (socket) {
        var sockets = this;
        console.log('user connected');
    
        socket.on('myEvent', function(data) {
            sockets.emit('hello_all_clients',data);
        });
    }
    

    【讨论】:

      【解决方案2】:

      您可以像这样从导出中返回一个函数。

      module.exports = function (io) { // pass io to initialize
            return function (socket) {
               // io and socket are both scoped
             }
      }
      

      然后在 server.js 中

      // socket.io communication
      io.sockets.on('connection', socketRoutes(io));
      

      【讨论】:

      • Nindaff 也感谢您的回答,我接受了 Tresdin 的回答,因为我认为这更容易,但我也喜欢这个技巧!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 2015-09-23
      • 2017-07-12
      • 2014-11-06
      • 1970-01-01
      相关资源
      最近更新 更多