2017-09-13 106 views
1

在節點中得到這個錯誤,我認爲這是由於我的一件中間件有點關係,但它指向的代碼行是我的用戶控制器在res .render()調用。TypeError:req.next不是一個函數

我找不到任何人在網上寫這個錯誤,並且在查看一段代碼後找不到原因。有任何想法嗎?

enter image description here

+0

'next'是獨立函數,它不是'req'對象的一部分。你在代碼中調用'req.next'嗎? – alexmac

+0

不,我不.. – Antoine

+0

那麼你能提供堆棧跟蹤嗎? – alexmac

回答

3

如果你看看在快速的源代碼,你會看到該行的response.js 966(從堆棧)是這樣的:

if (err) return req.next(err); 

你看到的錯誤消息暗示req已定義,但next不是函數。如果你看遠一點了,你能看到req是來自:

var req = this.req; 

其中this是你叫render響應對象。

雖然next通常只是作爲參數傳遞給一個回調傳遞,還應該是一個稱爲next附加到請求的功能。這不是你通常與自己互動的東西,它是內部工作的一部分。

所以我看到兩種可能性。或者有東西改變了res.req指向錯誤的對象,或者東西已經吹走req.next。我建議添加一些控制檯日誌記錄來確切地分離出錯的地方。例如,如果你把這個每個中間件之間的通話:

app.use(function(req, res, next) { 
    console.log(typeof req.next); 

    next(); 
}); 

這將讓您識別的地步,被它應該是被別的功能req.next開關。

+0

真棒,感謝您的真正徹底的答案,我將有機會很快看到這一點,並回到你身邊,但我認爲這將有助於我進行調試。 – Antoine

+0

我發現了這個錯誤,我在同一個中間件中調用next()兩次。 – Antoine