将Node / Express应用程序设置为实时或生产模式的最佳方法

时间:2015-05-01 09:17:40

标签: node.js express

我目前正在将我的node / express应用程序转换为生产部署,作为其中的一部分,我需要使其以生产友好模式运行(例如,对stdOut的调试较少,将日志写入不同的地方,在发生错误时减少告诉用户等。)。

我正在努力解决这个问题,因为每当我设置几乎任何类型的变量来调用'生产'模式时,它都不会对程序运行起作用。

在开发模式下启动时,我的代码通过Gulp运行,并运行此脚本:

#!/usr/bin/env node
var debug = require('debug')('ascema');
var app = require('../app');

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
    debug('Express server listening on port ' + server.address().port);
});

如您所知,这只是快速生成器生成的启动脚本。

为了在实时模式下运行它,我创建了一个供服务器使用的替代启动(无论如何我几乎不能使用gulp)并且live.js运行它:

#!/usr/bin/env node
var app = require('./app.js');

app.set('env', 'production');

console.log('running on Port 3000');

var server = app.listen(3000);

但是,当我在应用中的任何地方使用app.get('env')时(例如在app.js或其中的各种依赖项中),它仍会返回“开发”,因此我的生产任务都不会发生。

我在这里做错了什么?

非常感谢。

2 个答案:

答案 0 :(得分:22)

执行NodeJS应用程序时,必须在命令行上设置NODE_ENV变量。

例如:

NODE_ENV=production node app.js

此外,NODE_ENV是一个环境变量,因此如果将其设置在服务器的环境中,则每次执行应用程序时都不需要提供它,node app.js将会这样做。

您可以在`/ etc / environment'中设置环境变量。文件。以下是有关详细信息:https://help.ubuntu.com/community/EnvironmentVariables

答案 1 :(得分:1)

通过使用NPM,您可能会在package.json中使用以下脚本:

  "scripts": {
    "start": "nodemon ./bin/www",
    "dev_win": "set NODE_ENV=development && node ./bin/www >> /romba/log/api.log 2>> /romba/log/error.log",
    "prod_win": "set NODE_ENV=production && node ./bin/www >> /romba/log/api.log 2>> /romba/log/error.log"
    "prod_nix": "NODE_ENV=production node ./bin/www >> /romba/log/api.log 2>> /romba/log/_error.log"
  },...

要启动脚本之一,请使用以下命令:

 npm run-script prod_win

在JavaScript代码中,我检查条件:

process.env.NODE_ENV.indexOf('production') > -1

或使用Express.js

app.use((err, req, res, next) => {
  req.app.get('env') === 'development' ? ...