我是Java的背景,初入node,对对象复用不是很清楚。
比如,我现在的controller到了两不同的js文件中,文件中都需要用redis的client,我应该怎么处理? **Solution A: **
file1.js:
var redis = require(‘redis’).createClient();
file2.js
var redis = require('redis').createClient();
Solution B: redis.js
var redis = require('redis').createClient();
module.exports = redis;
file1.js
var redis = require('./redis');
file2.js
var redis = require(’./redis’);
================ 另外我也用到了socket.io,获取io对象采用 var app = require(‘express’)() , server = require(‘http’).createServer(app) , io = require(‘socket.io’).listen(server); 情况也一样,如果我要在两个文件中使用socket.io,难道我要用上面的代码两次么?如果是用两次,那么相当于要创建两个server对象?
请教一个最佳的实战方法。
如果你说的对象复用是指在不同模块之间访问同一个对象,那我可以理解为,你需要解决的是模块间的互访。
懒人的方式:使用全局对象 global
file1.js var redis_client = global.redis_client = require(‘redis’).createClient();
纠结但据说更优雅的方式:使用 exports 导出每个模块需要对外的接口
file1.js exports.redis_client = require(‘redis’).createClient();
file2.js var redis_client = require(’./file1.js’).redis_client;
module loading 只发生一次。node 在加载一个module的时候会查是不是已经加载了。
var app = require(‘express’)() , server = require(‘http’).createServer(app) , io = require(‘socket.io’).listen(server);
比如这段代码,如果我在两个文件中都有这段代码,意思是我得到的io是同一个实例?
遇到个非常奇怪的问题。我现在是用的express的标准结构,启动应用是node app.js, 在app.js中,我使用了 exports.channel = io; 或者 global.channel = io; 导出io变量,但是在其他文件中var app = require(’…/app’); 但是使用app.channel的时候说是undefined的。。不知道什么情况