これがこの問題のベスト プラクティスであるかどうかはわかりませんが、アプリで socket.io を使用する方法を紹介します。
私の app.js には、次の行があります。
var io = require('socket.io').listen(server, { log: false });
routeRegistrar.init(app, io);
routeRegistrar
は、すべてのコントローラーを通過してそのルートを登録するために使用する補助関数です。以下を参照してください。
var fs = require('fs');
var controllersFolder = "controllers";
var controllersFolderPath = __dirname + '/../' + controllersFolder + "/";
module.exports.init = function(app, io){
fs.readdirSync(controllersFolderPath).forEach(function(controllerName){
require(controllersFolderPath + controllerName).init(app, io);
});
};
io
var をすべてのコントローラーに伝達するため、すべてのコントローラーで使用できることに注意してください。コントローラーには次のものがあります。
var sockets; //see that this variable becomes global to the controller
module.exports.init = function(app, io) {
app.get("/chat", chat);
sockets = io.sockets;
sockets.on('connection', function(socket) {
//do any cool stuff here
});
};
function chat(){
//sockets is available here, at the route level - so do more cool stuff here
}