Nodejs中app.get(env) === development是什么意思?

Nodejs中app.get(env) === development是什么意思?

express中

if (app.get(‘env’) === ‘development’) { 是什么意思?

源程序如下:

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
	app.use(function (err, req, res, next) {
		res.status(err.status || 500);
		res.render('error', {
			message: err.message,
			error: err
		});
	});
}

5 回复

Node.js 中 app.get('env') === 'development' 是什么意思?

在 Express 应用程序中,app.get('env') 是一个用来获取当前环境变量的方法。通常情况下,这个环境变量是通过设置 NODE_ENV 环境变量来指定的。

示例代码

const express = require('express');
const app = express();

// 设置默认环境为 'production'
app.set('env', process.env.NODE_ENV || 'production');

// development error handler
if (app.get('env') === 'development') {
    app.use(function (err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
else {
    app.use(function (err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: {}
        });
    });
}

// 启动服务器
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  • app.get('env'): 这个方法返回当前应用的环境变量。默认情况下,它会检查 process.env.NODE_ENV 环境变量。如果该环境变量没有被设置,则默认为 'production'

  • app.get('env') === 'development': 当应用运行在开发环境时,这段条件判断语句为真。在这个例子中,如果 NODE_ENV 被设置为 'development',则进入开发错误处理中间件。

  • 开发错误处理中间件:

    • 在开发环境中,当发生错误时,Express 会渲染一个包含错误详细信息的页面(例如 error.ejs),这样开发者可以查看详细的错误信息,包括堆栈跟踪。
  • 生产错误处理中间件:

    • 在生产环境中,为了安全性和用户体验,通常不会显示详细的错误信息。因此,只显示错误消息而不显示堆栈跟踪。

通过这种方式,你可以根据不同的环境配置不同的行为,从而更好地管理你的应用程序。


app.get(‘env’) :当前用户环境变量中NODE_ENV值;

express 文档有提到 env 的获取规则

windows: set NODE_ENV=development

在Node.js中使用Express框架时,app.get('env') 用于获取当前应用环境(如开发环境、生产环境等)。当 app.get('env') === 'development' 成立时,意味着当前应用运行在开发环境中。

在开发环境中,通常需要更多的调试信息来帮助开发者发现和解决问题。因此,在上面提供的代码示例中,当应用处于开发环境时,会设置一个错误处理器,该处理器会在发生错误时返回详细的错误信息和堆栈跟踪,这对于开发者来说是非常有用的。

示例代码解析:

if (app.get('env') === 'development') {
    app.use(function (err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

这段代码的作用是:当应用处于开发环境时,如果遇到未捕获的错误,它将调用中间件函数处理该错误。该中间件接收4个参数(err, req, res, next),分别代表错误对象、请求对象、响应对象以及下一个中间件的函数。此中间件首先设置HTTP状态码为错误对象中的状态或默认的500状态码,然后渲染名为 “error” 的视图模板,并传递错误消息和错误对象作为数据给该视图模板。

这样做的好处是在开发过程中可以快速地查看到错误的具体原因,而在生产环境中则可能不会暴露这些细节以保护系统安全。

回到顶部