在 NodeJS 中分离模块以用于单个对象
Separating modules in NodeJS for use with a single object
我有一个 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 命名空间中的代码基本相同,但我无权访问 server.js
中使用的 io
变量。有没有办法在这里访问?我只使用 require() 吗?实现此功能的最佳方法是什么?
谢谢
您可以从 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);
我有一个 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 命名空间中的代码基本相同,但我无权访问 server.js
中使用的 io
变量。有没有办法在这里访问?我只使用 require() 吗?实现此功能的最佳方法是什么?
谢谢
您可以从 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);