Indefinido atributo en jade motor de plantillas
Pregunta
Simplemente estoy tratando de mostrar un valor en un campo de entrada con Jade (0.20.3) y Express (2.5.8):
input(name='username', type='text', id="username", value=username)
Es bastante simple, pero esto arroja un error cuando el valor es undefined:
username is not defined
Sin embargo, la documentación que se indica:
When a value is undefined or null the attribute is not added, so this is fine, it will not compile 'something="null"'.
Hay algo que me habría hecho mal?
Solución
Respuesta corta:uso locals.someVar
si no estás seguro de que someVar
existe.
Respuesta Larga:
Creo que Brandon respuesta inicial y el último comentario es la correcta (aunque el #{...}
la sintaxis no es necesario), sino para elaborar un poco:Hay una diferencia entre pasar en una variable (técnicamente, la propiedad de un objeto) con un valor de undefined
, y no pasa de esa variable en todos.
Porque Jade transforma su plantilla en JS fuente y eval
s (en el contexto de un with
el bloque), usted tiene que asegurarse de que no se está refiriendo a ninguna de las variables que no han sido aprobadas en, o que van a ser . Este blog tiene algunos antecedentes sobre indefinido vs no declaradas las variables y ReferenceError
.
Su Jade plantilla debería funcionar correctamente si usted hace una de estas cosas:
// 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')
Pero estos no funcionan:
res.locals(req.session) //if no username property exists
res.render('index', { /* no username */ } )
Si no es práctico para pasar manualmente en cada parámetro que desee consultar, se puede hacer referencia a la variable en su plantilla como propiedades en el locals
objeto (por ejemplo, locals.username
)
Otros consejos
Tienes que asegurarte de que estás pasando el nombre de usuario a la plantilla de jade.Ejemplo:
app.get('/', function (req, res) {
res.render('index', { title:'APP NAME', username: req.session.username });
});
Además, lo llamarías así en la plantilla de jade: #{username}