无法调用另一个文件中的函数(nodejs + express)

Can't call a function in another file (nodejs + express)

我有一个简单的 express 应用程序,我希望在 sockets 目录中的单独文件中有我的套接字侦听信息(那里的每个文件都对应一个控制器 - 关注点分离) .

app.js 中,我正在尝试让它工作:

io.on('connection', function(socket) {
  socket.on('game-save-comment', require('./sockets/games.js')(data));
});

./sockets/games.js 看起来像:

var GameSockets = function(data) {
  console.log('got here');
}

exports.GameSockets = GameSockets;

但是,我收到此错误:

  socket.on('game-save-comment', require('./sockets/games.js')(data));
                                                               ^
ReferenceError: data is not defined

我错过了什么?

这里有两个问题。由于您将 GameSockets 导出为命名函数,因此在 app.js 中您应该将其用作:

io.on('connection', function(socket) {
  socket.on('game-save-comment', require('./sockets/games.js').GameSockets(data));
});

然而,您遇到的错误并不是由此引起的。您应该将函数传递给 .on() 事件处理程序,但您尝试将执行该函数的结果传递给那里。所以最后你的 app.js 应该看起来像(请注意没有函数调用):

io.on('connection', function(socket) {
  socket.on('game-save-comment', require('./sockets/games.js').GameSockets);
});