2015-09-20 41 views
1

當我強調測試我的Express服務器(與請求轟擊它),我可以用下面的錯誤死機呢:追趕低水平表達JS例外

events.js:85 
     throw er; // Unhandled 'error' event 
      ^
Error: accept EMFILE 
    at exports._errnoException (util.js:746:11) 
    at TCP.onconnection (net.js:1308:24) 

在負載下,我想快遞忽略TCP請求它不能處理和繼續前進,不會崩潰。我怎樣才能乾淨地捕捉accept EMFILE錯誤?

(注:我已經安裝toobusy-js但仍然可以觸發這個錯誤。)

回答

0

定義錯誤處理中間件像其他中間件,除了具有四個參數,而不是三個,特別是與簽名(ERR,REQ,RES , 下一個)。例如:

app.use(function(err, req, res, next) { 
    console.error(err.stack); 
    res.status(500).send('Something broke!'); 
}); 

您可以在其他app.use()和路由調用之後最後定義錯誤處理中間件;例如:

var bodyParser = require('body-parser'); 
var methodOverride = require('method-override'); 

app.use(bodyParser()); 
app.use(methodOverride()); 
app.use(function(err, req, res, next) { 
    // logic 
}); 

http://expressjs.com/guide/error-handling.html

如果不工作,你可以使用process.on('uncaughtException'。或者您可以使用pm2自動重新啓動您的應用。

+0

爲什麼要把錯誤處理中間件放到最後? – Randomblue

+0

這就是它的工作原理。請參閱鏈接。文本來自Express文檔。你可以問Express開發者。 –

+0

Express錯誤處理程序中間件不起作用。它沒有捕捉到這個例外。 – Randomblue