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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top