【问题标题】:Catching a swig template error correctly when using res.render on Express.js在 Express.js 上使用 res.render 时正确捕获 swig 模板错误
【发布时间】:2013-10-17 14:10:32
【问题描述】:

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

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

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

如何捕捉 swig 在 res.render 中引发的错误。

【问题讨论】:

    标签: node.js express swig-template


    【解决方案1】:

    一种解决方案是使用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 错误之外,我还没有找到其他方法。

    【讨论】:

    • 这个答案似乎很好用!虽然我希望有一个解决方案可以以更精确的方式捕获错误......
    • @villetou 我同意。我看到的唯一方法是在错误处理程序中检查 err.stack 以查看是否在 Swig 模块中的某处引发了错误。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 2016-06-13
      • 1970-01-01
      相关资源
      最近更新 更多