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
locals
es el objeto raíz de la plantilla.fuente
render
etapa:res.render('view', {username: user.name});
if 'username' in this p=username
Esto 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.locals
ya 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
undefined
si se verifica deif
antemano.Creé un middleware para tener el método
isDefined
disponible en todas partes en mis vistas:module.exports = (req, res, next) => { res.locals.isDefined = (variable) => { return typeof(variable) !== 'undefined' }; next(); };
fuente