2017-06-15 13 views
0

我想從文檔中找出如何正確處理Express中的res.render的可選回調中的錯誤(例如錯誤的模板)。如何處理res.render的回調中的錯誤

我稱它與文檔中的示例非常相似,並在某些情況下使用它將附加數據附加到呈現的輸出。

res.render('template', undefined, (err, html) => { 
      if (err) // then what? 
      var processed = process(html) 
      res.send(processed) 
     }) 

documentation說:

回調,一個回調函數。如果提供,該方法返回可能的錯誤和呈現的字符串,但不執行自動響應。發生錯誤時,該方法在內部調用next(err)。

但它似乎是得到正確行爲的唯一方法是如果我可以next(err)我自己在回調。有人能告訴我,當他們說下一個(err)會被自動調用時,這裏的文檔試圖說些什麼嗎?

回答

1

Expressjs在錯誤處理方面有非常好的documentation。所以,你可以做的是,如果犯錯存在引發錯誤:

res.render('template', undefined, (err, html) => { 
 
    if (err) throw new Error('Something went wrong in render'); 
 
    var processed = process(html) 
 
    res.send(processed) 
 
});

然後定義來處理你的錯誤中間件。您可以在其他app.use()和路由調用之後最後定義它。一個基本的錯誤處理中間件看起來像下面這樣:

app.use(function(err, req, res, next) { 
 
    res.status(err.status || 500); 
 
    res.render('error', { 
 
     message: err.message, 
 
     error: err 
 
    }); 
 
});

當務之急是這個中間件是免費的錯誤。這是因爲這是代碼的最後一部分,它將捕獲從其上面定義的其他代碼傳遞的任何錯誤。

+0

我明白,我使用類似的方法捕捉錯誤。然而,我的問題是文檔在談到什麼時候說什麼:'發生錯誤時,該方法在內部調用next(err)。「這表明我們不應該拋出自己的錯誤。 –