在Express.js上使用res.render时正确捕获swig模板错误

时间:2013-10-17 14:10:32

标签: node.js express swig-template

我正在使用Express.js和swig模板来构建Web应用程序。问题是当swig渲染失败时(例如当模板出错时),我无法捕获它抛出的错误并且节点崩溃。

具体来说,当我使用stringGenerator函数返回一个对象并以错误的方式引用该对象时,会出现错误。我收到一个“意外的密钥”错误,我似乎无法抓住它。

app.get('/', function (req, res) {
   try {
       res.render('index', { 'stringFunction': stringGenerator });
   } catch(err) {
     console.error(err);
   }
});

如何捕获res.render中swig抛出的错误。

2 个答案:

答案 0 :(得分:0)

一种解决方案是使用express-domain-middleware。这允许您捕获路由中的错误并使用正常的Express错误处理程序处理它们:

app.use(require('express-domain-middleware'));

...your routes...

// error handler
app.use(function(err, req, res, next) {
  console.error('An error occurred:', err.message);
  res.send(500);
});

虽然这并不严格处理Swig错误,但除了使用域来捕获Swig错误之外我还没有找到另一种方法。

答案 1 :(得分:0)

如果您使用Swig~1.2.2,它会将异常传递给Express,它将在您设置的任何错误处理程序中处理它。

相关问题