从通过require()加载的脚本中的app.js访问生成的值

时间:2014-01-05 19:16:04

标签: javascript node.js express

我有一个Express.js Node网络应用程序。在我的app.js中,我在应用初始化期间生成一个字符串:

// app.js
var mongourl = /* based on process.env.VCAP_SERVICES constant */;

现在,我有一个脚本,我通过require()加载到app.js:

// app.js
var db = require('./db');

此脚本需要使用我的app.js中定义的mongourl变量。什么是执行此操作的好方法。我发现我可以将字符串设置为process.env值,例如

// app.js
process.env.mongourl = /* creating the string */;

然后可以通过process.evn.mongourl在db.js中访问,但我不确定这是否是一个好的模式。

3 个答案:

答案 0 :(得分:1)

// in db.js you could require an app config.js file
var config = require('config');
// then access via config.db.url

// or you can pass stuff to modules
var db = require('./db')(mongourl);

// or in app.js use app.set()
app.set('mongourl', mongourl);
// then wherever you need it: app.get('mongourl')

答案 1 :(得分:0)

  

我不确定这是不是一个好的模式

不是,你只是污染了不属于你的全局对象。至少考虑使用命名空间。

答案 2 :(得分:0)

更惯用的方法是为db连接创建一个构造函数,该函数接受字符串。

它不一定是你可以添加的实际构造函数

var dburl;
exports.init = function(param) {
     dburl = param:
}

环境变量并不是真正意义上的,因为它们是全球性的,可以看到(并与之碰撞)其他模块。明确地设置它意味着它是本地的,如果你需要异步,你可以更明确地控制它的定义方式。