Node.js 将Node/Express应用程序设置为live或production模式的最佳方法

Node.js 将Node/Express应用程序设置为live或production模式的最佳方法,node.js,express,Node.js,Express,我目前正在将我的node/express应用程序制作成一个生产部署,作为这一过程的一部分,我需要让它以一种生产友好模式运行(例如,减少对标准输出的调试,将日志写入不同的位置,减少出错时告诉用户的次数等) 我对此有些挣扎,因为每当我设置一个几乎任何类型的变量来调用“生产”模式时,它都不会影响程序的运行 在开发模式下启动时,我的代码通过Gulp运行,并运行以下脚本: #!/usr/bin/env node var debug = require('debug')('ascema'); var app

我目前正在将我的node/express应用程序制作成一个生产部署,作为这一过程的一部分,我需要让它以一种生产友好模式运行(例如,减少对标准输出的调试,将日志写入不同的位置,减少出错时告诉用户的次数等)

我对此有些挣扎,因为每当我设置一个几乎任何类型的变量来调用“生产”模式时,它都不会影响程序的运行

在开发模式下启动时,我的代码通过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);
});
正如您所知,这只是从express generator生成的启动脚本

为了在实时模式下运行它,我为服务器创建了一个备用启动(无论如何我都不能使用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或其各种依赖项)时,它仍然返回“development”,因此我的任何生产任务都不会发生

我做错了什么


非常感谢。

执行NodeJS应用程序时,必须在命令行上设置
NODE\u ENV
变量

例如:

NODE_ENV=production node app.js
另外,
NODE\u ENV
是一个环境变量,因此如果在服务器上的环境中设置它,则无需在每次执行应用程序时提供它,因此
NODE app.js
就可以了


您可以在
/etc/environment
文件中设置环境变量。更多详细信息。

通过使用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' ? ...

我必须删除脚本中的空白,如下所示
set NODE_ENV=development&&NODE./bin/www
,因为它包含在变量中,在使用===