我有點困惑,關於如何在Node.js中要求和使用模塊。在多個模塊中要求(同一個實例)socket.io
我的情況是這樣的:
我在一個單一的文件,它使用Socket.io實時通信寫了一個完整的服務器。
現在,index.js變得相當大,我想將代碼分成幾個模塊,以使其更易於管理。
例如,我有一些功能可以爲客戶提供調查服務並獲取他們的答案。我把所有這些函數放在一個單獨的模塊中,並在index.js中要求它。迄今爲止工作良好。
我唯一關心的是,如果有另一種方式在模塊中使用SAME套接字實例。
我現在的編碼是這樣的:
index.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);
});
survey.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函數中。
什麼是「正確的方法」來做到這一點?
如果我在require('socket.io')
裏面的調查模塊中,它是否與index.js
中的實例相同?
我怎麼會要求,因爲它需要server
,它需要app
,這是在index.js
創建?
我很困惑,希望有人能幫助我。謝謝!
我怎麼會定義一個以上調查模塊中的一個功能是這樣的嗎?目前邏輯是'var Survey = {}'和'module.exports = Survey',因爲我將許多函數附加到'Survey'。 – Danmoreng
我明白你的意思......生病更新的答案。 –
這實際上是有道理的在我的眼前。不過,我現在已經看到了多個示例 - 不是將匿名構造函數中的Survey定義爲對象,而是通過「Survey.prototype.loadSurvey = function(){}'附加了該函數的名稱和其他函數。這似乎並沒有爲我工作,我不知道爲什麼。 :(例如:https://codinginthetrenches.com/2015/10/03/nodejs-modules-should-export-object-constructors/ – Danmoreng