我对如何在 Node.js 中请求和使用模块有点困惑。
我的场景如下:
我在一个文件中编写了一个完整的服务器,它使用 Socket.io 进行实时通信。
现在index.js变得相当大,我想将代码分成几个模块以使其更易于管理。
例如,我有一些功能可以向客户提供调查并获取他们的答案。我将所有这些函数放在一个单独的模块中,并在 index.js 中需要它。到目前为止效果很好。
我唯一关心的是,是否有另一种方法可以在模块内使用 SAME 套接字实例。
我当前的编码如下所示:
索引.js:
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var Survey = require('./survey');
io.on('connection', function (client) {
client.on('getCurrentQuestion', function (data) {
Survey.getCurrentQuestion(parseInt(data.survey_id), client.id);
});
});
server.listen(port, server_url, function () {
Survey.init(io);
});
调查.js:
var io = null;
var Survey = {};
Survey.init = function(socketio) {
io = socketio;
};
Survey.getCurrentQuestion = function(survey_id, socket_id) {
var response = {
status: "unknown",
survey_id: survey_id
};
// [...] some code that processes everything
// then uses Socket.io to push something back to the client
io.sockets.in(socket_id).emit('getCurrentQuestion', response);
};
module.exports = Survey;
这样就可以了,但我不高兴通过io
在所需模块的 init 函数内。
做到这一点的“正确方法”是什么?
If I require('socket.io')
在调查模块内,它是否与中的实例相同index.js
?
我什至会要求它,因为它需要server
,这需要app
,它创建于index.js
?
我很困惑,希望有人可以帮助我。谢谢!