Atributo indefinido em jade modelo do motor
Pergunta
Eu estou simplesmente tentando apresentar um valor em um campo de entrada com Jade (0.20.3) e Expressar (2.5.8):
input(name='username', type='text', id="username", value=username)
Ele é bastante simples, mas isso lança um erro quando o valor é indefinido:
username is not defined
No entanto, a documentação indica:
When a value is undefined or null the attribute is not added, so this is fine, it will not compile 'something="null"'.
Há algo que eu teria feito de errado?
Solução
Resposta curta:utilização locals.someVar
se você não tiver certeza de que someVar
não existe.
Resposta Longa:
Eu acho que Brandon de resposta inicial e último comentário está correto (embora o #{...}
sintaxe não é necessário), mas para elaborar um pouco:Há uma diferença entre passar em uma variável (tecnicamente, uma propriedade de objeto) com um valor de undefined
, e não passar essa variável.
Porque Jade transforma o modelo em JS de origem e de eval
s (no contexto de um with
bloco), você tem que certificar-se de que você não está se referindo a todas as variáveis que ainda não foi passado, ou que vai ser . Este post de blog tem alguma informação sobre indefinido vs não declarado variáveis e ReferenceError
.
O Jade modelo deve funcionar corretamente se você fizer uma dessas coisas:
// 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')
Mas eles não funcionam:
res.locals(req.session) //if no username property exists
res.render('index', { /* no username */ } )
Se isso não é prático para manualmente passar em cada parâmetro, você pode querer referir-se, você pode fazer referência à variável em seu modelo como propriedades no locals
objeto (e.g. locals.username
)
Outras dicas
Você tem que se certificar de que você está passando nome de usuário para o Jade modelo.Exemplo:
app.get('/', function (req, res) {
res.render('index', { title:'APP NAME', username: req.session.username });
});
Além disso, você poderia chamá-lo assim no Jade modelo: #{username}