是否可以在Node / Express 4.0中声明全局variables?
我有多个路由,需要访问数据库,为开发我使用本地数据库,显然生产我使用托pipe数据库
唯一的问题是我每次去推释放,我必须通过每个path手动更改数据库链接
例如
var mongodb = require('mongojs').connect('urlhere', ['Collection']);
如果我可以在app.js
声明一个variables就好了
app.set('mongoDBAddress', 'urlhere');
然后在每个文件中做类似于var mongodb = require('mongojs').connect(app.get('mongoDBAddress'), ['Collection']);
有谁知道这是否可以实现我已经搞了大约一个小时的谷歌search,试图包括不同的东西,但我没有运气。 谢谢。
从文档 :
在浏览器中,顶级范围是全局范围。 这意味着在浏览器中,如果你在全局范围内,
var something
将会定义一个全局variables。 在Node中,这是不同的。 顶级范围不是全球范围; 在Node模块内var something
将在本地模块 。
你必须有不同的想法。 而不是创build一个全局对象,创build你的模块,让他们拿一个app
实例,例如:
// add.js module.exports = function(app) { // requires an `app` return function add(x, y) { // the actual function to export app.log(x + y) // use dependency } } // index.js var app = {log: console.log.bind(console)} var add = require('./add.js')(app) // pass `app` as a dependency add(1, 2) //^ will log `3` to the console
这是Express和其他图书馆的惯例。 app
在你的主文件(即index.js
)中,你需要的模块有一个app
参数。
你可以给GLOBAL
添加一个全局variables,看看这个问题 ,虽然这可能被认为是不好的做法。
我们有两个方法在node.js中共享模块内的variables。
- 全球
- module.export
但是你的问题似乎有所不同,我得到的是你想要连接你的应用程序到不同的数据库,而不改变代码。 你需要做的是使用命令行参数
更多参考
server.js
var connectTo = { dev : "url1" production : "url2" } var mongodb = require('mongojs').connect(connectTo[process.argv[2]], ['Collection']);
运行你的server.js
node server.js dev // for connecting to development database
要么
node server.js production // for connecting to prodiction database
跨不同模块共享连接
//Method 1 global.mongodb = require('mongojs').connect(connectTo[process.argv[2]], ['Collection']); //Method 2 exports.mongodb = require('mongojs').connect(connectTo[process.argv[2]], ['Collection']); exports.getMongoDBAddress = function() { return connectTo[process.argv[2]] }