Javascript NodeJS、websocket和module.export

Javascript NodeJS、websocket和module.export,javascript,node.js,websocket,Javascript,Node.js,Websocket,我有一个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('/a

我有一个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");
但在这里,我只能处理“socket”参数,我想这只适用于一个人

我想将io从server.js传递到socket.js

我试过(在server.js中):

(在socket.js中):

显然,它不起作用。我甚至不明白套接字参数是从哪里来的

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

我真的很感激任何帮助,我对这一切都是新手


谢谢

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

module.exports = function (socket) {
    var sockets = this;
    console.log('user connected');

    socket.on('myEvent', function(data) {
        sockets.emit('hello_all_clients',data);
    });
}

您可以从导出返回函数

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

谢谢你的回答,傻瓜,我接受了特雷斯丁的回答,因为我认为这更简单,但我也喜欢这个把戏!
module.exports = function (io) { // pass io to initialize
      return function (socket) {
         // io and socket are both scoped
       }
}
// socket.io communication
io.sockets.on('connection', socketRoutes(io));