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
。我是否必须将其添加到此代码中?我该如何添加它?
答案 0 :(得分:318)
NODE_ENV
是受environment variable网络服务器框架欢迎的express。运行节点应用程序时,它可以检查环境变量的值,并根据值执行不同的操作。 NODE_ENV
专门用于(按照惯例)说明特定环境是生产还是开发环境。如果在开发环境中运行,常见的用例是运行其他调试或日志代码。
您可以使用以下代码自行访问环境变量,以便您可以执行自己的检查和逻辑:
var environment = process.env.NODE_ENV
或者使用快递'app.get('env')
(注意:此默认为"development"
)
请注意,如果您没有为您的环境明确设置NODE_ENV
,则会undefined
。
如何实际设置环境变量因操作系统而异,也取决于您的用户设置。
如果要将环境变量设置为一次性,可以从命令行执行此操作:
export NODE_ENV=production
$env:NODE_ENV = 'production'
从长远来看,你应该坚持下去,这样如果你重新启动它就不会失败 - 而不是列出所有可行的方法来实现这一点,我会让你自己搜索如何做到这一点!
“公约”规定,NODE_ENV
只有两个值,production
或development
,全部小写。没有什么可以阻止你添加更多的值,但它可能不是一个好主意,因为我在我使用的许多node_modules中看到了很多这样的代码:
var development = process.env.NODE_ENV !== 'production';
请注意,尝试在 节点应用程序中设置NODE_ENV
是非常糟糕的想法 - 如果你这样做它仅适用于设置它的进程,所以事情可能不会像你期望的那样工作。不要这样做 - 你会后悔的。
答案 1 :(得分:16)
NODE_ENV 是环境变量,代表快速服务器中的节点环境。
这是我们设置和检测我们所处环境的方式。
使用production
和development
非常常见。
设置:强>
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
,以避免将实现细节泄漏给全世界。