![](/img/trans.png)
[英]Express.js:how to use different middlewares based on NODE_ENV?
[英]What is NODE_ENV and how to use it in 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_ENV
是由express Web 服務器框架流行的環境變量。 當一個節點應用程序運行時,它可以檢查環境變量的值並根據該值做不同的事情。 NODE_ENV
專門用於(按照慣例)來說明特定環境是生產環境還是開發環境。 如果在開發環境中運行,一個常見的用例是運行額外的調試或日志記錄代碼。
您可以使用以下代碼自己訪問環境變量,以便您可以執行自己的檢查和邏輯:
var environment = process.env.NODE_ENV
如果您不承認價值,則假設生產:
var isDevelopment = environment === 'development'
if (isDevelopment) {
setUpMoreVerboseLogging()
}
您也可以使用 express' app.get('env')
函數,但請注意,不推薦這樣做,因為它默認為"development"
,這可能會導致開發代碼在生產環境中意外運行 - 如果您使用它會更安全如果未設置此重要值(或者如果首選,默認為上述生產邏輯),應用程序將引發錯誤。
請注意,如果您沒有為您的環境明確設置NODE_ENV
,那么如果您從process.env
訪問它,它將是undefined
,沒有默認值。
如何實際設置環境變量因操作系統而異,還取決於您的用戶設置。
如果要將環境變量設置為一次性的,可以從命令行執行此操作:
export NODE_ENV=production
$env:NODE_ENV = 'production'
從長遠來看,您應該堅持這一點,以便在您重新啟動時不會取消設置 - 而不是列出所有可能的方法來做到這一點,我會讓您自己搜索如何做到這一點!
約定規定,您應該為NODE_ENV
使用兩個“主要”值, production
或development
,全部小寫。 沒有什么可以阻止您使用其他值(例如, test
,如果您希望在運行自動化測試時使用一些不同的邏輯),但請注意,如果您使用第三方模塊,它們可能會顯式地與'production'
進行比較'production'
或'development'
來決定要做什么,所以可能會有不立即明顯的副作用。
最后,請注意,這是一個非常糟糕的主意,試圖設置NODE_ENV
從節點應用程序本身-如果你這樣做,這將只適用於從它被設置的過程中,這樣的事情可能會不喜歡你的工作會期待他們。 不要這樣做 - 你會后悔的。
NODE_ENV是一個環境變量,代表 express 服務器中的節點環境。
這就是我們如何設置和檢測我們所處的環境。
使用production
和development
非常普遍。
放:
export NODE_ENV=production
得到:
您可以使用app.get('env')
獲取它
我假設最初的問題包括 Express 如何使用這個環境變量。
Express 使用 NODE_ENV 來改變它自己的默認行為。 例如,在開發模式下,默認錯誤處理程序會將堆棧跟蹤發送回瀏覽器。 在生產模式下,響應只是Internal Server Error
,以避免將實現細節泄露給全世界。
通常,您會在開發、測試和調試代碼時使用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:
導出 NODE_ENV='值'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.