Question

J'essaie simplement d'afficher une valeur dans un champ de saisie avec Jade (0,20.3) et Express (2.5.8):

input(name='username', type='text', id="username", value=username)

C'est assez simple, mais cela lance une erreur lorsque la valeur n'est pas définie:

username is not defined

Cependant, la documentation indique:

When a value is undefined or null the attribute is not added, so this is fine, it will not compile 'something="null"'.

Y a-t-il quelque chose que j'aurais mal fait?

Était-ce utile?

La solution

Réponse courte: Utiliser locals.someVar Si vous n'êtes pas sûr que someVar existe.

Réponse plus longue:

Je pense que la réponse initiale et le dernier commentaire de Brandon sont corrects (bien que le #{...} La syntaxe n'est pas nécessaire), mais pour élaborer un peu: il y a une différence entre le passage d'une variable (techniquement, une propriété d'objet) avec une valeur de undefined, et ne pas passer du tout cette variable.

Parce que Jade transforme votre modèle en source JS et evals it (dans le contexte d'un with Block), vous devez vous assurer que vous ne faites pas référence à des variables qui n'ont pas été transmises, ou elles le seront. Ce billet de blog a un arrière-plan sur les variables non définies vs non déclarées et ReferenceError.

Votre modèle de jade devrait fonctionner correctement si vous faites une de ces choses:

// ok, even if req.session.username is not defined
res.render('index', { username: req.session.username })

// ditto
res.local('username', req.session.username);
res.render('index')

Mais cela ne fonctionnera pas:

res.locals(req.session) //if no username property exists
res.render('index', { /* no username */ } )

S'il n'est pas pratique de passer manuellement dans chaque paramètre que vous voudrez peut-être vous référer, vous pouvez vous référer à la variable de votre modèle comme propriétés sur le locals objet (par exemple locals.username)

Autres conseils

Vous devez vous assurer de passer le nom d'utilisateur dans le modèle de jade. Exemple:

app.get('/', function (req, res) {
    res.render('index', { title:'APP NAME', username: req.session.username });
});

De plus, vous l'appelleriez comme ça dans le modèle de jade: #{username}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top