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?


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
-}

- 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.


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.


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. :) :)


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();
};
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.