2017-06-15 48 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)。“这表明我们不应该抛出自己的错误。 –