在不使用全局variables的情况下在node.js文件之间共享variables

我试图从我的主文件(app.js)分开我的socket.io代码到一个单独的文件(socket.js)。 不过,我需要在app.js中定义我的io对象,这也在我的socket.js文件中使用。

目前,我将io设置为全局variables,因此可以从app.js( 可在path中访问的app.js中的全局variables? ) 访问 ,但我知道这是不好的做法。 有没有更好的方法来做到这一点(在这种情况下可以注射工作,因为我需要从app.js导出一个variables到socket.js而不是其他方式)? 谢谢!

app.js

var app = express(), server = require('http').createServer(app); //KIV -> io is set as a global variable io = require('socket.io').listen(server); require('./socket'); 

socket.js

 io.sockets.on('connection', function(socket) { //xxx } 

app.js

 var app = express(), server = require('http').createServer(app), socket = require('./socket'); var io = require('socket.io').listen(server); socket(io) 

socket.js

 module.exports = function (io) { io.sockets.on('connection', function(socket) { //.. } } 

其中一种方法是将对象作为parameter passing给函数(正如@Thomas的回答中所描述的那样)。

其他方法是创build一个新的文件说'global.js'。 只把这些项目放在你想成为全局的文件中。 例如

 var Global = { io : { } }; module.exports = Global; 

现在,在你的app.js中,

 var app = express(), server = require('http').createServer(app), global = require('./global.js'); global.io = require('socket.io').listen(server); require('./socket'); 

而在你的socket.js中:

 var global = require('./global.js'); global.io.sockets.on('connection', function(socket) { //xxx } 

希望能帮助到你…