web-dev-qa-db-fra.com

Jade - Template Engine: Comment vérifier si une variable existe

J'utilise actuellement Jade sur un nouveau projet. Je veux rendre une page et vérifier si une certaine variable est disponible.

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!

J'ai toujours l'erreur suivante:

username is not defined

Des idées sur la façon dont je peux résoudre ce problème?

77
mbecker

Cela devrait fonctionner: 

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

Plus simple que la méthode de @ Chetan si le fait de tester des valeurs faussement au lieu de valeurs non définies ne vous dérange pas:

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

Cela fonctionne parce que locals , quelque peu ironiquement nommé, est l'objet racine du modèle.

88
BMiner
if 'username' in this
    p=username

Cela fonctionne parce que res.locals est l'objet racine du modèle.

10
avoid3d

Si vous savez à l'avance que vous souhaitez qu'une variable particulière soit disponible, mais pas toujours utilisée, j'ai commencé à ajouter une valeur "par défaut" à l'objet helpers.

app.helpers({ username: false });

De cette façon, vous pouvez toujours exécuter if (username) { sans échec catastrophique. :)

6
Dominic Barnes

Le 'nom d'utilisateur' ne devrait-il pas être inclus dans l'objet local?

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

1
TK-421

Création d'un middleware pour que la méthode isDefined soit disponible partout dans mes vues:

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