2017-07-12 39 views
0

我目前正試圖發送一個404頁面,這是一個.pug文件,只要ID參數不在數據庫中。我在api路由中調用next(),並且當我在彈性搜索回調中執行它時,它會拋出一個未找到的頁面錯誤以及兩條Cant set header after they are sent消息。當我在外面呼叫next()時,它將正確顯示404錯誤消息而不是頭部消息。我不確定它爲什麼這樣做。下一個()和發送404頁面

//這樣做會正確發送404頁面。

app.get('/redirect/:id', function(req, res, next) { 
     let found = false; 

     if (!found) { 
      return next(); 
     } 

}); 

//但我需要檢查,如果一個ID存在,然後扔了404,但做這種方式是行不通的,我會不斷收到有關無法設置頁眉錯誤和404消息。

app.get( '/重定向/:ID',函數(REQ,RES,下一個){

search.byId(req.params.id, (err, card) => { 
     if (err) log.log(err); 

     if (!card || card === undefined) { 
      return next(); 
     } 
    }); 

}); 
+0

爲什麼要使用next()'''?你完成了。 '''res.status(404).end();'''會返回你的404 – Wainage

+0

好吧我試過了,但它仍然沒有發送我的404頁面。在shell中,設置標題錯誤消息不會再顯示,但也找不到404錯誤頁面。它確實顯示了一堆GET請求與304狀態關聯 – henhen

+0

什麼叫你的終點?郵差? – Wainage

回答

0

在快遞,next()函數是用於使控制到下一個中​​間件。 Using Express Middleware

app.use('/user/:id', function (req, res, next) { 
    console.log('Request URL:', req.originalUrl) 
    next() 
}, function (req, res, next) { 
    console.log('Request Type:', req.method) 
    next() 
}) 

在上面的例子中,當第一下一個()被調用第二函數(REQ,RES,下一個)(在express.js術語函數被調用中間件)得到exectued和日誌出請求類型。 因爲你沒有構建中間件堆棧,所以接下來在這裏沒有幫助。 如果你只是想渲染404頁面,請閱讀How to redirect 404 errors to a page in ExpressJS?

相關問題