表达和玉,忽略渲染错误

时间:2011-04-06 13:57:02

标签: node.js express pug

所以,表达+ jade ==很酷。没问题。但是,来自django,我错过了django模板使用的失败模式。在django中,如果我尝试渲染一个不存在的变量,它就会忽略它并继续前进。虽然有时候这真的很烦人,但大部分时间都不是。因此,当我尝试使用express在jade中呈现变量时,如果该变量不存在/未定义则表示抱怨500错误。


500 TypeError: Jade:14 
12. ' // main content, post, login, etc ' 
13. ' - if (data.session.user) ' 
14. ' != partial(\'dash') ' 

Jade:3 
1. '- if (data.session.user)' 
2. ' p #{data.session.user.id}' 
3. ' p #{data.cookie.connect.sid}' Cannot read property 'connect' of undefined

我只是在这里试验,所以忽略我正在尝试打印的东西。 :)总之,是否有一种简单的方法可以告诉jade / express忽略模板中的错误并继续渲染,例如django模板系统中的行为。

2 个答案:

答案 0 :(得分:2)

由于渲染器在javascript的评估失败时抛出错误,因此无法实现。

https://github.com/visionmedia/jade/blob/master/lib/jade.js#L197

您可以分叉项目并添加一个选项以避免调用rethrow或至少通过包裹res.render让渲染失败更好:

app.render = function (res, options) {
  try {
    res.render(options);
  } catch(e) {
    //log(e);
  }
}

答案 1 :(得分:2)

您可以在Jade中测试变量的存在:

  if typeof(msg) !== 'undefined'
    p #{msg}

这不是自动的,但我发现这是一个救星。

相关问题