在不使用全局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 }
希望能帮助到你…