我试图从文档中找出如何正确处理Express中res.render
的可选回调中的错误(例如错误的模板)。
我将它与文档中的示例完全相同,并在某些情况下使用它将额外数据附加到渲染输出。
res.render('template', undefined, (err, html) => {
if (err) // then what?
var processed = process(html)
res.send(processed)
})
回调,一个回调函数。如果提供,则该方法返回可能的错误和呈现的字符串,但不执行自动响应。发生错误时,该方法在内部调用next(err)。
但似乎获得正确行为的唯一方法就是我可以在回调中自己next(err)
。当有人说下一个(错误)将被自动调用时,有人可以告诉我这些文档试图在这里说些什么吗?
答案 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
});
});

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