【问题标题】:express and jade, ignore render errorsexpress 和jade,忽略渲染错误
【发布时间】:2011-04-06 13:57:01
【问题描述】:

所以,快递+翡翠==酷。那里没有问题。但是,来自 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模板系统中的行为。

【问题讨论】:

    标签: node.js express pug


    【解决方案1】:

    这是不可能的,因为当 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);
      }
    }
    

    【讨论】:

    • 拍得好。我不想分叉。我想知道是否有可能捕获渲染错误并创建 null/false 虚拟变量并通过 catch 语句重新渲染。
    【解决方案2】:

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

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

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

    【讨论】:

    • 这看起来有点矫枉过正,模板不应该抛出未定义的错误!
    猜你喜欢
    • 2014-10-10
    • 2014-06-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多