Jade - Template Engine: So überprüfen Sie, ob eine Variable vorhanden ist

80

Ich verwende Jade derzeit 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 den folgenden Fehler:

username is not defined

Irgendwelche Ideen, wie ich das beheben kann?

mbecker
quelle
1
scheint jetzt (2014), wir bekommen diesen Fehler nicht mehr. Viel einfacher zu bedienen.
gfaceless

Antworten:

106

Das sollte funktionieren:

- if (typeof(username) !== 'undefined'){
  //-do something
-}
Chetan
quelle
- if (isset (Benutzername)) 'isset ist nicht definiert
mbecker
2
Entschuldigung, ich wurde mit PHP und Javascript verwechselt. Meine Antwort wurde aktualisiert.
Chetan
7
Vielen Dank! Dieser Code funktioniert: - if (Typ des Benutzernamens! == "undefined")
mbecker
93

Einfacher als die Methode von @ Chetan, wenn es Ihnen nichts ausmacht, auf falsche Werte anstatt auf undefinierte Werte zu testen:

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

Dies funktioniert, weil der etwas ironisch benannte localsdas Stammobjekt für die Vorlage ist.

BMiner
quelle
Dies gibt mir einen Compilerfehler: 'builtin_function_or_method' Objekt hat kein Attribut 'Benutzername'
zakdances
@yourfriendzak - Sind Sie sicher, dass Ihr Fehler durch diesen Teil Ihrer Vorlage verursacht wird?
BMiner
1
Funktioniert perfekt und ist besser als Inline-Javascript, danke.
Sergi Ramón
Ich mag diese Antwort, weil dies zeigt, dass Jade eine Leerzeichen-sensible Sprache ist.
Victor.Palyvoda
Vorsicht, dies funktioniert nur, wenn die Variable im Controller in der renderPhase definiert wurde:res.render('view', {username: user.name});
Augustin Riedinger
10
if 'username' in this
    p=username

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

vermeiden3d
quelle
6

Wenn Sie im Voraus wissen, dass eine bestimmte Variable verfügbar sein soll, aber nicht immer verwendet wird, habe ich begonnen, dem Helferobjekt einen "Standard" -Wert hinzuzufügen.

app.helpers({ username: false });

Auf diese Weise können Sie immer noch if (username) {auf einen katastrophalen Ausfall verzichten. :) :)

Dominic Barnes
quelle
2
Vielen Dank, obwohl FYI für Express 3.x dies jetzt istapp.locals({ username: false });
7zark7
6
Netter Ansatz. Beachten Sie, dass in Express 4.x app.localskeine Funktion mehr ist, also sollte es seinapp.locals.username = false;
Tom
0

Erstellt eine Middleware, damit die Methode isDefinedin meinen Ansichten überall verfügbar ist:

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