2013-05-14 73 views
10

我正在使用Restify和Nodejs,並且對將控制返回到堆棧中下一個中間件的正確方法提出了一個問題。當我說「堆棧中的下一個中間件」時,我希望我使用正確的短語。Restify中間件 - 正確調用堆棧中的下一個中間件

基本上,我的代碼看起來是這樣的:

//server is the server created using Restify 
server.use(function (req, res, next) { 
    //if some checks are a success 
    return next(); 
}); 

現在,我想知道什麼是應該的代碼是return next();還是應只是next();把控制傳遞到堆棧中的下?

我檢查了這兩個工作 - 這兩個代碼片段將成功地傳遞控制權並按預期返回數據 - 我想知道的是如果兩者之間存在差異並且如果我需要使用另一個。

回答

17

沒有區別。我看了一下Restify的來源,它似乎沒有對中間件的返回值做任何事情。

之所以使用return next()純粹是爲了方便起見:

// using this... 
if (someCondition) { 
    return next(); 
} 
res.send(...); 

// instead of... 
if (someCondition) { 
    next(); 
} else { 
    res.send(...); 
}; 

這可能有助於防止這樣的錯誤:

if (someCondition) 
    next(); 
res.send(...); // !!! oops! we already called the next middleware *and* we're 
       //  sending a response ourselves! 
+1

嗨,你能回答我'做什麼下一個回調http處理程序? server.get('/',function(req,res,next){res.end();})'我還應該打電話嗎? – 2013-10-11 11:30:38

+1

@vp_arth如果你沒有以某種方式發回響應來結束請求,你可以使用next()將控制權交給下一個路由/中間件/(錯誤)處理程序 – robertklep 2013-10-11 18:59:11