出口

2013-08-02 22 views
3

希望這是一個簡單的,但我有我想要一個404或401等返回給用戶,並停止其他處理程序等出口

傳播一些自定義的中間件我期待着我可以做這樣的事情:

function SomeMiddleware(req, res, next) { 
    if(user.notRealOrSomething) 
    { throw new HttpException(401, "Tough luck buddy"); } 

    return next(); 
} 

但是找不到任何具體信息關於如何最好的做到這一點。

回答

4

您應該將錯誤傳遞給next()函數。

function SomeMiddleware(req, res, next) { 
    if(user.notRealOrSomething) { 
    return next(throw new HttpException(401, "Tough luck buddy")); 
    } 

    next(); 
} 

傳遞給next任何參數將被視爲除了'route'一個錯誤,這將跳至下一路線。

當下一個錯誤被調用時,錯誤中間件將被執行。

function (err, req, res, next) { 
    // err === your HttpException 
} 

Express.js會將任何帶有4個參數的中間件視爲錯誤中間件。

錯誤處理中間件的定義就像普通的中間件,但是必須以4:3的元數來定義的,即簽名(ERR,REQ,水庫,下一個):

所有這一切是很好的證明:http://expressjs.com/guide/error-handling.html

0

沒有什麼能阻止你使用響應對象:

res.send(401, "Tough luck buddy"); 
next('invalid user'); 
+0

這並不快遞4工作對我來說,它仍然返回500狀態,似乎忽略了res數據 –