2017-03-04 83 views
1
app.use(function (req, res, next) { 
    throw new Error('critical'); 
}) 

使Express服務器捕獲嚴重錯誤並輸出它,同時我希望它崩潰。禁用針對嚴重錯誤的快速錯誤處理

添加錯誤處理程序不會替換默認處理程序。

如何禁用關鍵錯誤的快速錯誤處理?

+0

的可能的複製[如何關閉的Node.js快遞(EJS模板引擎),用於生產錯誤?(http://stackoverflow.com/questions/25354022/how-do-i-turn- off-node-js-express-ejs-template-engine-errors-for-production) –

+0

@Muhammad不,它不是。禁用*錯誤處理*,而不是錯誤。 – estus

+0

另外,如果您擔心發送給客戶端的堆棧跟蹤信息,可以設置環境變量NODE_ENV = production。這將發送「內部錯誤500」而不是來自默認錯誤處理程序的堆棧跟蹤。 –

回答

2

如果您希望您的服務器在發生嚴重錯誤時發生崩潰,您可以定義一個error-handling middleware。這是通過定義一個函數4參數來完成的,第一個是錯誤。這將在拋出錯誤時調用。您可以檢查錯誤並確定它是否至關重要,如果是,請致電process.exit

const app = require('express')() 

app.use('/', (req, res) => { 
    throw new Error('critical') 
}) 

app.use((err, req, res, next) => { 
    if (err.message === 'critical') { 
    process.exit(1) 
    } else { 
    // carry on listening 
    } 
}) 
+0

謝謝,它的工作原理。我想知道在Express中是否有更多的慣用方式來執行此操作,而不是明確地調用process.exit。 – estus

+0

@estus你可以通過點擊複選標記接受答案嗎?我需要點提供我的問題提供賞金。 –

+0

我想我可以,我沒有看到更好的方式來做到這一點。再次感謝。 – estus