簡體   English   中英

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

[英]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專門用於(按照慣例)來說明特定環境是生產環境還是開發環境。 如果在開發環境中運行,一個常見的用例是運行額外的調試或日志記錄代碼。

訪問 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 ,沒有默認值。

設置 NODE_ENV

如何實際設置環境變量因操作系統而異,還取決於您的用戶設置。

如果要將環境變量設置為一次性的,可以從命令行執行此操作:

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

從長遠來看,您應該堅持這一點,以便在您重新啟動時不會取消設置 - 而不是列出所有可能的方法來做到這一點,我會讓您自己搜索如何做到這一點!

約定規定,您應該為NODE_ENV使用兩個“主要”值, productiondevelopment ,全部小寫。 沒有什么可以阻止您使用其他值(例如, test ,如果您希望在運行自動化測試時使用一些不同的邏輯),但請注意,如果您使用第三方模塊,它們可能會顯式地與'production'進行比較'production''development'來決定要做什么,所以可能會有不立即明顯的副作用。

最后,請注意,這是一個非常糟糕的主意,試圖設置NODE_ENV從節點應用程序本身-如果你這樣做,這將只適用於從它被設置的過程中,這樣的事情可能會不喜歡你的工作會期待他們。 不要這樣做 - 你會后悔的。

NODE_ENV是一個環境變量,代表 express 服務器中的節點環境

這就是我們如何設置和檢測我們所處的環境。

使用productiondevelopment非常普遍。

放:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM