3

所以,快递+玉==酷。那里没有问题。但是,来自 django,我错过了 django 模板使用的故障模式。在 django 中,如果我尝试渲染一个不存在的变量,它只会忽略它并继续前进。虽然有时这真的很烦人,但大多数时候并非如此。因此,当我尝试使用 express 渲染 jam 中的变量时,如果该变量不存在/未定义,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 模板系统中的行为。

4

2 回答 2

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);
  }
}
于 2011-04-06T21:47:41.800 回答
2

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

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

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

于 2012-01-02T17:21:11.967 回答