Node.js,在app.configure中expression和使用开发与生产

什么是最简单的方法让expression知道我在什么环境? 例如,我想要做下面的连接到redis取决于我在什么env。这可以从命令行完成吗?

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 }); }); 

你的方法是可以的,但你可以做一些更通用的东西,比如将Redis的configuration数据存储在一个文件中,或者像参数一样传递主机和端口:

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_ENVvariables(process.env.NODE_ENV)知道你处于什么环境: https : //github.com/visionmedia/express/blob/master/lib/application.js#L55

您可以在启动应用程序时设置该variables,如下所示: NODE_ENV=production node app.js (推荐),在Express代码之前手动设置process.env.NODE_ENV在节点应用程序中,或将该env var放入〜/ .profile,如Ricardo说过。

为了扩展使用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} } } 

加载configuration文件并根据env进行切换。

 // 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 ),这样configurationvariables就具有适合于它运行的服务器的设置。

只需将NODE_ENV环境variables设置为productiondevelopment ,如快速文档所示: http : NODE_ENV

我只是把NODE_ENV=development机器的~/.profile (.bashrc或者linux上的NODE_ENV=development留给了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 

这样你可以使用命令行参数,env设置和默认值。

使用允许创build多个configuration文件的configuration模块https://www.npmjs.com/package/config

如default.json,production.json

并开始你的服务器

出口设置NODE_ENV =生产&& npm开始