我有一个NodeJS + ExpressJS + Socket.IO服务器,我正在尝试将不同的名称空间划分为不同的模块。
基本上我想在server.js中要求socket.io库,但可以从我的模块中访问io
变量,如下所示:
server.js
var app = require('express')();
var jwt = require('jsonwebtoken');
var server = require('http').Server(app);
var fs = require('fs');
var io = require('socket.io')(server);
var bodyParser = require('body-parser');
var _log = require('./logging/loggly.js').Client();
// Global NS
var SK = {
Namespaces:{}
};
var Migrations = require('./sockets/migrations');
var Backups = require('./sockets/backups');
var Cloudmanager = require('./sockets/cloudmanager');
SK.Namespaces[Migrations.NS] = Migrations;
SK.Namespaces[Backups.NS] = Backups;
SK.Namespaces[Cloudmanager.NS] = Cloudmanager;
....
....
migrations.js
var exports = module.exports = {};
///////////////////////////////////////////////
//
// Migrations Namespace
//
///////////////////////////////////////////////
exports.NS = 'migrations';
exports.socket = io.of('/'+exports.NS); // PROBLEM IS 'io' IS UNDEFINED HERE
exports.socket.on('connection', function(socket){
});
我的所有3个socket.io名称空间中的代码基本相同,但我无法访问io
中使用的server.js
变量。有没有办法在这里访问?我只是使用require()吗?什么是实现此功能的最佳方式?
谢谢
答案 0 :(得分:1)
您可以从接受migrations.js
值作为参数的io
导出函数:
module.exports = function (io) {
var socket = io.of('/'+exports.NS);
socket.on('connection', function(socket){});
return {
NS: 'migrations',
socket: socket,
};
};
然后只需在server.js
:
var Migrations = require('./sockets/migrations')(io);