- Você pode chamar app.render no nível raiz e res.render apenas dentro de uma rota/middleware.
app.render
sempre retorna o html na função de retorno de chamada, enquantores.render
faz isso somente quando você especificou a função de retorno de chamada como seu terceiro parâmetro. Se você chamarres.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');
})
})
res.render
usaapp.render
internamente para renderizar arquivos de modelo.can't set headers
significa que você não pode entrar no corpo.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