【问题标题】:Jade - Template Engine: How to check if a variable existsJade - 模板引擎:如何检查变量是否存在
【发布时间】:2011-07-01 13:08:17
【问题描述】:

我目前正在一个新项目中使用 Jade。我想渲染一个页面并检查某个变量是否可用。

app.js:

app.get('/register', function(req, res){
    res.render('register', {
        locals: {
          title: 'Register',
          text: 'Register as a user.',
        }
      });
});

register.jade:

- if (username)
p= username
- else
p No Username!

我总是收到以下错误:

username is not defined

关于如何解决此问题的任何想法?

【问题讨论】:

  • 似乎到现在(2014 年),我们不再收到此错误。更容易使用。

标签: node.js pug express


【解决方案1】:

这应该有效:

- if (typeof(username) !== 'undefined'){
  //-do something
-}

【讨论】:

  • - if (isset(username))' isset 没有定义
  • 抱歉,我对 PHP 和 Javascript 感到困惑。更新了我的答案。
  • 坦克很多!此代码有效: - if (typeof username !== "undefined")
【解决方案2】:

如果您不介意测试虚假值而不是未定义值,则比 @Chetan 的方法更简单:

if locals.username
  p= username
else
  p No Username!

之所以有效,是因为有点讽刺意味的是 locals 是模板的根对象。

【讨论】:

  • 这给了我一个编译器错误:“builtin_function_or_method”对象没有属性“用户名”
  • @yourfriendzak - 您确定您的错误是由模板的这一部分引起的吗?
  • 完美运行,比使用内联 javascript 更好,谢谢。
  • 我喜欢这个答案,因为这表明 Jade 是对空格敏感的语言。
  • 小心,这只有在render阶段在控制器中定义变量时才有效:res.render('view', {username: user.name});
【解决方案3】:
if 'username' in this
    p=username

这是因为 res.locals 是模板中的根对象。

【讨论】:

    【解决方案4】:

    如果您事先知道您想要一个可用的特定变量,但并不总是使用,我已经开始向助手对象添加一个“默认”值。

    app.helpers({ username: false });
    

    这样,您仍然可以在没有灾难性故障的情况下执行if (username) {。 :)

    【讨论】:

    • 谢谢,不过对于 express 3.x 仅供参考,现在是 app.locals({ username: false });
    • 不错的方法。请注意,在 Express 4.x 中,app.locals 不再是一个函数,所以它应该是 app.locals.username = false;
    【解决方案5】:

    哈巴狗更简单,玉的继任者

    if msg
      p= msg
    

    【讨论】:

      【解决方案6】:

      'username' 不应该包含在 locals 对象中吗?

      https://github.com/visionmedia/jade/tree/master/examples

      【讨论】:

      • 是的,但如果事先与if 核对过,它仍然不应该返回undefined
      【解决方案7】:

      创建了一个中间件,让 isDefined 方法在我的视图中随处可用:

      module.exports = (req, res, next) => {
        res.locals.isDefined = (variable) => {
          return typeof(variable) !== 'undefined'
        };  
        next();
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        • 2017-03-24
        • 1970-01-01
        • 2020-05-30
        • 2013-07-22
        • 2023-03-31
        • 1970-01-01
        相关资源
        最近更新 更多