Tam*_*mpa 31 development-environment production-environment node.js express
让表达知道我所处的环境最简单的方法是什么?例如,我想做以下操作,根据我所使用的环境建立与redis的连接.可以通过命令行完成吗?
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
var r = require("redis").createClient(6379,'127.0.0.1');
});
app.configure('production', function(){
app.use(express.errorHandler());
r = redis.createClient(6379,'46.137.195.230', { detect_buffers: true });
});
Run Code Online (Sandbox Code Playgroud)
ale*_*lex 28
你的方法没问题,但你可以做一些更通用的东西,比如将Redis的配置数据存储在一个文件中,或者像主要参数一样传递主机和端口:
node app.js REDIS_HOST REDIS_PORT
然后在您的应用程序中,您可以使用process.argv获取它们:
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
var r = require("redis").createClient(process.argv[2], process.argv[3]);
});
app.configure('production', function(){
app.use(express.errorHandler());
var r = require("redis").createClient(process.argv[2], process.argv[3], { detect_buffers: true });
});
Run Code Online (Sandbox Code Playgroud)
更新:
通过查看NODE_ENV变量(process.env.NODE_ENV),Express将知道您所处的环境:https://github.com/visionmedia/express/blob/master/lib/application.js#L55
您可以在启动应用程序时设置该变量,如下所示:( NODE_ENV=production node app.js
推荐),在Express代码之前在节点应用程序中手动设置process.env.NODE_ENV,或者将这个env var放在〜/ .profile中,如Ricardo所说.
Sea*_*ean 24
要扩展使用config.json文件的想法:
// config.json
{
"development": {
"redisPort": 6379,
"redisHost": "127.0.0.1",
"errorHandlerOptions": {"dumpExceptions": true, "showStack": true}
},
"production": {
"redisPort": 6379,
"redisHost": "46.137.195.230",
"errorHandlerOptions": {"dumpExceptions": false, "showStack": false}
}
}
Run Code Online (Sandbox Code Playgroud)
加载配置文件并根据环境切换.
// app.js
var config = require('./config.json')[app.get('env')];
app.use(express.errorHandler(config.errorHandlerOptions));
var r = require("redis").createClient(config.redisPort,config.redisHost);
Run Code Online (Sandbox Code Playgroud)
确保在每台服务器上设置了NODE_ENV(参见其他答案,单向:)NODE_ENV=production node app.js
,这样config变量就具有适合其运行的服务器的设置.
Ric*_*asi 18
只需将NODE_ENV
环境变量设置为production
或development
,如明确的'docs:http://expressjs.com/guide.html#configuration中所示
我只是留NODE_ENV=development
在开发机器~/.profile
(Linux上的.bashrc或bash_profile),并为production
那些做同样的事情.
通过订购这些参数的来源,我做了更全面的事情:
var env = process.argv[2] || process.env.NODE_ENV || 'development'
var mongourl = process.argv[3] || process.env.NODE_DB || 'mongodb://localhost/default'
var port = process.env.PORT || 9001
Run Code Online (Sandbox Code Playgroud)
这样您就可以使用命令行参数,env设置和默认值.