it-swarm.com.de

Jade - Template Engine: Wie prüft man, ob eine Variable existiert?

Ich verwende derzeit Jade für ein neues Projekt. Ich möchte eine Seite rendern und prüfen, ob eine bestimmte Variable verfügbar ist.

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!

Ich erhalte immer folgende Fehlermeldung:

username is not defined

Irgendwelche Ideen, wie ich das beheben kann?

77
mbecker

Das sollte funktionieren: 

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

Einfacher als die @ Chetan-Methode, wenn Sie nichts dagegen haben, falsche Werte anstelle von undefinierten Werten zu testen:

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

Dies funktioniert, weil das etwas ironisch benannte locals das Stammobjekt für die Vorlage ist.

88
BMiner
if 'username' in this
    p=username

Dies funktioniert, weil res.locals das Stammobjekt in der Vorlage ist.

10
avoid3d

Wenn Sie im Voraus wissen, dass Sie eine bestimmte Variable zur Verfügung haben möchten, die aber nicht immer verwendet wird, habe ich begonnen, dem Hilfsobjekt einen Standardwert hinzuzufügen.

app.helpers({ username: false });

Auf diese Weise können Sie if (username) { auch ohne einen katastrophalen Fehler ausführen. :)

6
Dominic Barnes

Sollte "username" nicht im lokalen Objekt enthalten sein?

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

1
TK-421

Eine Middleware erstellt, damit die Methode isDefined überall in meinen Ansichten verfügbar ist:

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