什么是NODE_ENV以及如何在Express中使用它?

2022-08-30 00:31:09

这是我目前在生产上运行的应用。

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


答案 1

NODE_ENV是由快速 Web 服务器框架流行的环境变量。当节点应用程序运行时,它可以检查环境变量的值,并根据该值执行不同的操作。 具体用于(按照惯例)来说明特定环境是生产环境还是开发环境。一个常见的用例是在开发环境中运行其他调试或日志记录代码。NODE_ENV

访问NODE_ENV

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

var environment = process.env.NODE_ENV

假设生产,如果你不认识这个值:

var isDevelopment = environment === 'development'

if (isDevelopment) {
  setUpMoreVerboseLogging()
}

你可以使用 express' 函数,但请注意,不建议这样做,因为它默认为 ,这可能会导致开发代码在生产环境中意外运行 - 如果未设置此重要值(或者如果首选,则默认为生产逻辑,如上所述),则应用引发错误会更安全。app.get('env')"development"

请注意,如果尚未为环境显式设置NODE_ENV,则从 中访问该环境时将未定义该环境,没有默认值。process.env

设置NODE_ENV

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

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

  • linux & macexport NODE_ENV=production
  • 窗口$env:NODE_ENV = 'production'

从长远来看,您应该保留它,以便在重新启动时不会取消设置它 - 而不是列出所有可能的方法,我会让您自己搜索如何做到这一点!

约定俗成规定,有两个“主要”值应该用于 或 ,全部小写。没有什么可以阻止您使用其他值(例如,如果您希望在运行自动测试时使用一些不同的逻辑),但请注意,如果您使用的是第三方模块,它们可能会明确地与第三方模块进行比较或确定要执行的操作,因此可能存在不会立即明显的副作用。NODE_ENVproductiondevelopmenttest'production''development'

最后,请注意,尝试从节点应用程序本身设置NODE_ENV是一个非常糟糕的主意 - 如果您这样做,它只会应用于设置它的进程,因此事情可能不会像您期望的那样工作。不要这样做 - 你会后悔的。


答案 2

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

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

这是非常常见的使用和.productiondevelopment

设置:

export NODE_ENV=production

获取:

您可以使用以下命令获取它app.get('env')