2011-08-01 68 views
4

看來,如果我想移動到Nodejs中的「下一個」功能(通常可能是Javascript),我無法將參數傳遞給下一個功能。Nodejs和連接「下一個」功能

這裏是我的意思是:

app.get('/webpage', SomeFunction, NextFunction); 

function SomeFunction (req, res, next) { 
    // Do things 
    next(); 
} 

function NextFunction (req, res) { 
    // Do other things 
} 

現在,如果在SomeFunction我是說next(req, res);它似乎並沒有工作。它永遠不會達到該方法。顯然我不能直接傳遞參數......但我的問題是爲什麼?下一個函數如何知道使用哪個參數?是因爲它們被命名爲相同還是自動傳遞第一個和第二個參數?如果NextFunction使用blah, bleet而不是req, res它會繼續工作嗎?

回答

15

這是設計Connect(負責此行爲的node.js中間件)的故意方面。您的中間件收到的next函數是而不是堆棧中的下一個中間件;這是Connect生成的一個函數,它要求下一個中間件處理它(以及爲處理特殊情況做一些額外的工作,比如沒有「下一個中間件」時)。

如果你的中間件應該返回一個響應,就這樣做。如果不應該,這意味着後面的一些中間件應該返回一個響應。如果您需要將數據傳遞給流程後面的部分,則應將其附加到請求對象req的相應部分。

例如,捆綁的bodyParser中間件負責根據請求主體的內容填充req.rawBodyreq.body。基於HTTP認證,捆綁的basicAuth中間件填充req.remoteUser

這是您應該嘗試模擬的模式:一堆中間件,每個中間件都會執行基本的增量操作來處理請求。如果你想要建模的東西不適合這個範例,那麼你可能應該只有一個函數來處理請求,你可以從中調用所有你自己的應用程序邏輯。