MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Erro Express/Node.js:Erro de referência:Res não está definido

  1. Você pode chamar app.render no nível raiz e res.render apenas dentro de uma rota/middleware.
  2. app.render sempre retorna o html na função de retorno de chamada, enquanto res.render faz isso somente quando você especificou a função de retorno de chamada como seu terceiro parâmetro. Se você chamar res.render sem o terceiro parâmetro/função de retorno de chamada, o html renderizado é enviado ao cliente com um código de status de 200.

Dê uma olhada nos exemplos a seguir.

app.render
app.render('index', {title: 'res vs app render'}, function(err, html) {
    console.log(html)
});

res.render sem terceiro parâmetro
app.get('/render', function(req, res) {
    res.render('index', {title: 'res vs app render'})
})

res.render com terceiro parâmetro
app.get('/render', function(req, res) {
    res.render('index', {title: 'res vs app render'}, function(err, html) {
        console.log(html);
        res.send('done');
    })
})
  1. res.render usa app.render internamente para renderizar arquivos de modelo.
  2. can't set headers significa que você não pode entrar no corpo.
  3. res.render() A função compila seu modelo (por favor, não use ejs), insere locais lá e cria uma saída html a partir dessas duas coisas.

// aqui você define que todos os templates estão localizados em /views diretório
app.set('views', __dirname + '/views');

// here you set that you're using `ejs` template engine, and the
// default extension is `ejs`
app.set('view engine', 'ejs');

// here you render `local` template
response.render("local", {local: local_json});

Portanto, o caminho do modelo é views/ (primeira parte) + local (segunda parte) + .ejs (terceira parte) ===views/local.ejs