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

时间:2015-09-27 11:57:00

标签: node.js function express socket.io

我有一个简单的快递应用程序,我希望将我的套接字侦听信息放在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

我错过了什么?

1 个答案:

答案 0 :(得分:1)

这里有两个问题。由于您将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);
});