Node.js express和jade,忽略渲染错误

Node.js express和jade,忽略渲染错误,node.js,express,pug,Node.js,Express,Pug,所以,express+jade==酷。毫无疑问。然而,来自django,我缺少django模板使用的故障模式。在django中,如果我试图呈现一个不存在的变量,它只会忽略它并继续。虽然有时这真的很烦人,但大多数情况下并非如此。因此,当我试图用express在jade中呈现一个变量时,如果该变量不存在/未定义,express会抱怨500错误 500 TypeError: Jade:14 12. ' // main content, post, login, etc ' 13. ' - if

所以,express+jade==酷。毫无疑问。然而,来自django,我缺少django模板使用的故障模式。在django中,如果我试图呈现一个不存在的变量,它只会忽略它并继续。虽然有时这真的很烦人,但大多数情况下并非如此。因此,当我试图用express在jade中呈现一个变量时,如果该变量不存在/未定义,express会抱怨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模板系统中的行为。

这是不可能的,因为当javascript评估失败时,渲染器会抛出错误

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

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

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

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

这不是自动的,但我发现这是一个救命稻草。

好吧。我不想用叉子叉它。我想知道是否有可能捕获呈现错误并创建null/false的伪变量,然后通过catch语句重新呈现。这看起来太过分了,模板不应该抛出未定义的错误!