Express中的NODE_ENV是什么?

时间:2013-06-07 07:10:04

标签: javascript node.js express

var app = express();
app.set('views',settings.c.WEB_PATH + '/public/templates');
app.set('view engine','ejs');
app.configure(function(){
    app.use(express.favicon());
    app.use(express.static(settings.c.WEB_PATH + '/public'));
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.methodOverride());
    app.use(express.session({
            cookie:{ domain:"."+settings.c.SITE_DOMAIN, maxAge:1440009999},
            secret:'hamster',
            store: r_store,
            }));
    app.use(useragent.express());
    app.use(flash());
    app.use(passport.initialize());
    app.use(passport.session());
});

这是我的应用。我目前正在生产中运行它。

然而,有人告诉我NODE_ENV。我是否必须将其添加到此代码中?我该如何添加它?

4 个答案:

答案 0 :(得分:318)

NODE_ENV是受environment variable网络服务器框架欢迎的express。运行节点应用程序时,它可以检查环境变量的值,并根据值执行不同的操作。 NODE_ENV专门用于(按照惯例)说明特定环境是生产还是开发环境。如果在开发环境中运行,常见的用例是运行其他调试或日志代码。

访问NODE_ENV

您可以使用以下代码自行访问环境变量,以便您可以执行自己的检查和逻辑:

var environment = process.env.NODE_ENV

或者使用快递'app.get('env')注意:此默认为"development"

请注意,如果您没有为您的环境明确设置NODE_ENV,则会undefined

设置NODE_ENV

如何实际设置环境变量因操作系统而异,也取决于您的用户设置。

如果要将环境变量设置为一次性,可以从命令行执行此操作:

  • linux& mac export NODE_ENV=production
  • windows $env:NODE_ENV = 'production'

从长远来看,你应该坚持下去,这样如果你重新启动它就不会失败 - 而不是列出所有可行的方法来实现这一点,我会让你自己搜索如何做到这一点!

“公约”规定,NODE_ENV只有两个值,productiondevelopment,全部小写。没有什么可以阻止你添加更多的值,但它可能不是一个好主意,因为我在我使用的许多node_modules中看到了很多这样的代码:

var development = process.env.NODE_ENV !== 'production';

请注意,尝试在 节点应用程序中设置NODE_ENV非常糟糕的想法 - 如果你这样做它仅适用于设置它的进程,所以事情可能不会像你期望的那样工作。不要这样做 - 你会后悔的。

答案 1 :(得分:16)

NODE_ENV 是环境变量,代表快速服务器中的节点环境

这是我们设置和检测我们所处环境的方式。

使用productiondevelopment非常常见。

设置:

export NODE_ENV=production

获取:

您可以使用app.get('env')

来获取它

答案 2 :(得分:1)

通常,在开发,测试和调试代码时,将使用NODE_ENV变量执行特殊操作。例如,生成您在生产中不需要的详细日志记录和调试输出。 Express本身的行为取决于NODE_ENV是否设置为production。如果将这些行放在Express应用程序中,然后向/error发出HTTP GET请求,就可以看到此信息:

app.get('/error', function(req, res) {
  if ('production' !== app.get('env')) {
    console.log("Forcing an error!");
  }
  throw new Error('TestError');
});

app.use(function (req, res, next) {
  res.status(501).send("Error!")
})

请注意,后面的app.use()必须在所有其他方法处理程序之后排在最后!

如果在启动服务器之前将NODE_ENV设置为production,然后向服务器发送一个GET /error请求,则您应该不会在控制台中看到文本Forcing an error! ,并且响应不应在HTML主体(源自Express)中包含堆栈跟踪。 相反,如果您在启动服务器之前将NODE_ENV设置为其他值,则相反。

在Linux中,如下设置环境变量NODE_ENV:

export NODE_ENV =''

答案 3 :(得分:0)

我认为最初的问题是Express如何使用此环境变量。

Express使用NODE_ENV更改其自身的默认行为。例如,在开发模式下,默认错误处理程序会将堆栈跟踪发送回浏览器。在生产模式下,响应只是Internal Server Error,以避免将实现细节泄漏给全世界。