如何处理res.render回调中的错误

时间:2017-06-15 23:26:26

标签: node.js express

我试图从文档中找出如何正确处理Express中res.render的可选回调中的错误(例如错误的模板)。

我将它与文档中的示例完全相同,并在某些情况下使用它将额外数据附加到渲染输出。

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

documentation说:

  

回调,一个回调函数。如果提供,则该方法返回可能的错误和呈现的字符串,但不执行自动响应。发生错误时,该方法在内部调用next(err)。

但似乎获得正确行为的唯一方法就是我可以在回调中自己next(err)。当有人说下一个(错误)将被自动调用时,有人可以告诉我这些文档试图在这里说些什么吗?

1 个答案:

答案 0 :(得分: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
    });
});




这个中间件必须没有错误。这是因为这是代码的最后一部分,它将捕获从其上面定义的其余代码传递的任何错误。