Jade - 模板引擎:如何检查变量是否存在

mbe*_*ker 78 node.js express pug

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

app.js:

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

register.jade:

- if (username)
p= username
- else
p No Username!
Run Code Online (Sandbox Code Playgroud)

我总是得到以下错误:

username is not defined
Run Code Online (Sandbox Code Playgroud)

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

Che*_*tan 105

这应该工作:

- if (typeof(username) !== 'undefined'){
  //-do something
-}
Run Code Online (Sandbox Code Playgroud)

  • 坦克很多!此代码有效: - if(typeof username!=="undefined") (7认同)
  • 对不起,我对PHP和Javascript感到困惑.更新了我的回答. (2认同)

BMi*_*ner 88

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

if locals.username
  p= username
else
  p No Username!
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为有点具有讽刺意味的locals是模板的根对象.


avo*_*d3d 10

if 'username' in this
    p=username
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为res.locals是模板中的根对象.

  • 哇这究竟是怎么回事? (3认同)

Dom*_*nes 6

如果你事先知道你想要一个特定的变量,但并不总是使用,那么我就开始在helpers对象中添加一个"默认"值.

app.helpers({ username: false });
Run Code Online (Sandbox Code Playgroud)

这样,您仍然可以在if (username) {没有灾难性故障的情况下完成任务.:)

  • 好方法.请注意,在Express 4.x` app.locals`不再是一个函数,所以它应该是`app.locals.username = false;` (6认同)
  • 谢谢,虽然对于快递3.x的FYI现在是`app.locals({username:false});` (2认同)
  • 我喜欢Express的所有这些更新. (2认同)