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

标签 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 并想使用它。我该怎么做?

最佳答案

NODE_ENVenvironment variableexpress 流行起来网络服务器框架。当 Node 应用程序运行时,它可以检查环境变量的值并根据该值做不同的事情。 NODE_ENV 专门用于(按惯例)说明特定环境是生产还是开发环境。如果在开发环境中运行,一个常见的用例是运行额外的调试或记录代码。

访问 NODE_ENV

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

var environment = process.env.NODE_ENV

如果您无法识别值(value),请假设生产:

var isDevelopment = environment === 'development'

if (isDevelopment) {
  setUpMoreVerboseLogging()
}

您也可以使用 express 的 app.get('env') 函数,但请注意这是 不推荐,因为它是默认的到 "development",这可能会导致开发代码在生产环境中意外运行 - 如果未设置此重要值(或者如果首选,默认为生产环境),如果您的应用程序抛出错误会更安全逻辑同上)。

请注意,如果您没有为您的环境显式设置 NODE_ENV,如果您从 访问它,它将是 undefined>process.env,没有默认值。

设置 NODE_ENV

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

如果您想将环境变量设置为一次性,您可以从命令行进行:

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

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

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

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

关于javascript - 什么是 NODE_ENV 以及如何在 Express 中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16978256/

相关文章:

javascript - 如何在 node.js 中输出深度堆栈跟踪?

javascript - 将对象数组转换为每个对象的特定属性数组

javascript - Express & Handlebars 的全局属性

javascript - 在 NodeJS ExpressJS 中从 req.body 中删除一个变量

javascript - 如何从父网格和子网格中获取复选框元素的引用

Javascript:重写凌乱的代码,CDATA,使用匿名函数更快?

node.js - 如何在 Mongoose 中使用population/ref 保存模式

javascript - Node js multer 文件上传不起作用。 req.file 和 req.files 始终未定义

javascript - 选择选项 onclick 更改字体系列

javascript - 检测以 Angular 传递给 $compile 的字符串是否可编译的最佳方法?