让表达知道我所处的环境的最简单方法是什么?例如。我想做以下操作,根据我所使用的环境建立与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 });
});
答案 0 :(得分: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 });
});
更新
Express会通过查看NODE_ENV变量(process.env.NODE_ENV)来了解您所处的环境: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中里卡多说。
答案 1 :(得分: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}
}
}
加载配置文件并根据环境切换
// 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);
确保在每台服务器上设置了NODE_ENV(请参阅其他答案,单向:NODE_ENV=production node app.js
),这样配置变量就具有适合其运行的服务器的设置。
答案 2 :(得分:17)
只需将NODE_ENV
环境变量设置为production
或development
,如明确'docs:http://expressjs.com/guide.html#configuration
我只是将NODE_ENV=development
留在开发机器的~/.profile
(.bashrc或linux上的bash_profile)中,并对production
个执行相同操作。
答案 3 :(得分:9)
我通过订购这些参数的来源做了更全面的事情:
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
这样您就可以使用命令行参数,env设置和默认值。
答案 4 :(得分:0)
使用允许创建多个配置文件的配置模块 https://www.npmjs.com/package/config
例如default.json,production.json
然后启动你的服务器
export set NODE_ENV = production&& npm start