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

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环境变量设置为productiondevelopment,如明确的'docs:http://expressjs.com/guide.html#configuration中所示

我只是留NODE_ENV=development在开发机器~/.profile(Linux上的.bashrc或bash_profile),并为production那些做同样的事情.

  • 只是一个抬头.您发布的链接现已中断.我相信eqivelant是http://expressjs.com/api.html#app.set (6认同)

Arn*_*uin 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
Run Code Online (Sandbox Code Playgroud)

这样您就可以使用命令行参数,env设置和默认值.