是否可以在Node/Express 4.0中声明全局变量?
Is it possible to declare global variables in Node/Express 4.0
我有多条需要访问数据库的路由,开发时我使用本地数据库,显然生产时我使用托管数据库
唯一的问题是每次我去推动一个发布,我必须通过每条路线手动更改数据库链接
。
var mongodb = require('mongojs').connect('urlhere', ['Collection']);
如果我能在app.js
中声明一个像
app.set('mongoDBAddress', 'urlhere');
则在每个文件中执行如下操作var mongodb = require('mongojs').connect(app.get('mongoDBAddress'), ['Collection']);
有人知道这是可以实现的吗?我已经花了大约一个小时的时间在谷歌上搜索,并试图包括不同的东西,但我没有运气。谢谢。
From the docs:
在浏览器中,顶级作用域是全局作用域。这意味着在浏览器中,如果你在全局作用域中,
var something
将定义一个全局变量。在Node中这是不同的。顶层作用域不是全局范围;Node模块中的var something
将是本地的该模块 .
你必须有一点不同的想法。而不是创建一个全局对象,创建您的模块,使它们采用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
添加一个全局变量,参见这个问题,尽管这可能被认为是不好的做法。
在node.js中我们有两个方法来共享模块内的变量。
- 全球
- module.export
但是你的问题似乎是不同的,我得到的是你想要连接你的应用程序到不同的数据库,而不改变代码。您需要做的是使用命令行参数
查看更多ref
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]]
}
- 如何将变量声明为全局变量
- 如何将变量声明为全局变量?用case foreach?Javascript
- 返回语句后的函数声明全局变量不会被覆盖
- 为什么Javascript代码打印'未定义'即使变量被声明为全局变量
- JavaScript 全局变量声明
- 如何从选择菜单选项动态声明全局变量
- 让 javascript 将(默认情况下)未声明的变量声明到当前本地范围(基于首次使用)而不是全局范围
- 声明全局变量
- 由全局范围内的 Web 应用程序声明的全局变量
- 是否有任何选项可以在煎茶触摸中声明全局变量
- 如何将值从一个函数传递到另一个具有对象的函数,而无需在 JS 中声明全局变量
- 如何在不声明全局变量的情况下将值从一个函数传递到另一个函数?
- 如何从函数内部声明全局变量
- 在页面初始化时声明全局变量
- 如何在javascript中正确声明全局变量
- 是否可以在Node/Express 4.0中声明全局变量?
- Javascript:在一个脚本中声明全局变量,并在另一个脚本中使用它
- 如何使用JS声明全局变量
- 在 .js 文件中声明全局变量是否不好
- 如何在外部js文件中声明全局变量?