你如何检测express.js应用程序中的环境?

set*_*rgo 52 javascript node.js express

你如何检测expressJS应用程序运行的环境?(开发,测试,生产?).没有什么process.env表明环境......

我知道您可以在每个环境下的配置文件中声明变量,但如果您动态加载模块,这无济于事......

ale*_*lex 67

您可以通过选中app.settings.env(这将在Express中工作)来检查环境,或者您可以通过检查以更直接的方式执行此操作process.env.NODE_ENV(环境是在该变量中找到的或默认情况下为"开发"<这也适用于其他库如Socket.IO等).


DB *_*sad 23

app.get('env')也会返回环境.

if ( app.get('env') === 'development' ) {
    app.use(express.errorHandler());
}
Run Code Online (Sandbox Code Playgroud)

  • 但它怎么知道的?快递在哪里找出'env'被设置为什么.我没有在我的应用程序代码中设置它. (13认同)
  • @Costa它在Unix shell中设置为`NODE_ENV`环境变量.注意**这里的'env'一词容易混淆**:Unix环境,有时存储应用程序的设置,以及确定生产,开发等的环境设置NODE_ENV. (3认同)
  • 我很好奇这是如何实现的.'app.get'与用于定义路线的功能相同吗?听起来不太棒. (3认同)

iam*_*box 11

我想解决一种直接的方法,将NODE_ENV变量传递给您的节点脚本,以便访问它们 process.env

  "scripts": {
    "start": "./node_modules/.bin/cross-env NODE_ENV=development ./node_modules/.bin/nodemon server.js",
    "debug": "./node_modules/.bin/cross-env NODE_ENV=development ./node_modules/.bin/nodemon --debug server.js",
    "test": "./node_modules/.bin/cross-env NODE_ENV=test ./node_modules/.bin/babel-tape-runner test/test-*.js"
  },
Run Code Online (Sandbox Code Playgroud)

可以用作

if ( app.get('env') === 'development' ) {
    app.use(express.errorHandler());
}
Run Code Online (Sandbox Code Playgroud)