我有一个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中访问,但我不确定这是否是一个好的模式。
答案 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:
}
环境变量并不是真正意义上的,因为它们是全球性的,可以看到(并与之碰撞)其他模块。明确地设置它意味着它是本地的,如果你需要异步,你可以更明确地控制它的定义方式。