在NodeJS中分离模块以与单个对象一起使用

时间:2015-07-07 21:50:12

标签: node.js socket.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名称空间中的代码基本相同,但我无法访问io中使用的server.js变量。有没有办法在这里访问?我只是使用require()吗?什么是实现此功能的最佳方式?

谢谢

1 个答案:

答案 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);