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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top