Node.jsでモジュールを要求して使用する方法について少し混乱します。複数のモジュールでsocket.ioが必要(同じインスタンス)
私のシナリオは以下の通りです:
私は、リアルタイム通信にSocket.ioを使用して1つのファイルに完全なサーバーを書きました。
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関数の内部にあります。
これを行うには "正しい方法"がありますか?
調査モジュール内のI require('socket.io')
の場合は、index.js
と同じインスタンスになりますか?
index.js
で作成されたapp
が必要なserver
が必要なので、どうすればいいでしょうか?
私は混乱しており、誰かが私を助けることを願っています。ありがとう!
どのように私はより多くを定義しますこの方法でサーベイモジュールの1つの機能ですか?現在のところ、 'Survey'には多くの関数を付けているので、' var Survey = {} 'と' module.exports = Survey'という論理があります。 – Danmoreng
私はあなたが何を意味するかを見ます...病気の答えを更新します。 –
実際に私の目には意味があります。しかし、ここでは、匿名のコンストラクター関数内でオブジェクトとしてSurveyを定義する代わりに、関数に名前が付けられ、Survey.prototype.loadSurvey = function(){}によって接続された他の関数がどこにあるのか、複数の例を見てきました。それは私のために働くようには思われません、なぜ私は分かりません。 :(例:https://codinginthetrenches.com/2015/10/03/nodejs-modules-should-export-object-constructors/ – Danmoreng