83

我目前正在一个新项目中使用 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

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

4

7 回答 7

108

这应该有效:

- if (typeof(username) !== 'undefined'){
  //-do something
-}
于 2011-02-21T20:52:56.820 回答
94

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

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

这是可行的,因为有点讽刺意味locals的是模板的根对象。

于 2012-06-13T12:54:56.303 回答
9
if 'username' in this
    p=username

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

于 2013-05-23T14:30:51.890 回答
6

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

app.helpers({ username: false });

这样,您仍然if (username) {可以避免发生灾难性故障。:)

于 2012-06-13T13:45:22.747 回答
1

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

if msg
  p= msg
于 2021-05-10T02:59:13.913 回答
0

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

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

于 2011-02-21T20:45:55.277 回答
0

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

module.exports = (req, res, next) => {
  res.locals.isDefined = (variable) => {
    return typeof(variable) !== 'undefined'
  };  
  next();
};
于 2017-04-24T15:38:41.483 回答