我正在使用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抛出的错误。
答案 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,它将在您设置的任何错误处理程序中处理它。