Actualmente estoy usando Jade en un nuevo proyecto. Quiero renderizar una página y verificar si una determinada 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!
Siempre obtengo el siguiente error:
username is not defined
¿Alguna idea sobre cómo puedo solucionar esto?

Respuestas:
Esto debería funcionar:
- if (typeof(username) !== 'undefined'){ //-do something -}fuente
Más simple que el método de @ Chetan si no le importa probar valores falsos en lugar de valores indefinidos:
if locals.username p= username else p No Username!Esto funciona porque el nombre un tanto irónico
localses el objeto raíz de la plantilla.fuente
renderetapa:res.render('view', {username: user.name});if 'username' in this p=usernameEsto funciona porque res.locals es el objeto raíz de la plantilla.
fuente
Si sabe de antemano que desea que una variable en particular esté disponible, pero no siempre se usa, comencé a agregar un valor "predeterminado" al objeto de ayuda.
app.helpers({ username: false });De esta manera, aún puede
if (username) {prescindir de una falla catastrófica. :)fuente
app.locals({ username: false });app.localsya no es una función, por lo que debería serloapp.locals.username = false;¿No debería incluirse 'nombre de usuario' en el objeto locals?
https://github.com/visionmedia/jade/tree/master/examples
fuente
undefinedsi se verifica deifantemano.Creé un middleware para tener el método
isDefineddisponible en todas partes en mis vistas:module.exports = (req, res, next) => { res.locals.isDefined = (variable) => { return typeof(variable) !== 'undefined' }; next(); };fuente