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

时间:2012-05-23 06:03:48

标签: node.js express development-environment production-environment

让表达知道我所处的环境的最简单方法是什么?例如。我想做以下操作,根据我所使用的环境建立与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 });
});

5 个答案:

答案 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环境变量设置为productiondevelopment,如明确'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