- Puede llamar a app.render en el nivel raíz y res.render solo dentro de una ruta/middleware.
app.render
siempre devuelve el html en la función de devolución de llamada, mientras queres.render
lo hace solo cuando ha especificado la función de devolución de llamada como su tercer parámetro. Si llama ares.render
sin el tercer parámetro/función de devolución de llamada, el html renderizado se envía al cliente con un código de estado de 200.
Echa un vistazo a los siguientes ejemplos.
app.render
app.render('index', {title: 'res vs app render'}, function(err, html) {
console.log(html)
});
res.render
sin tercer parámetro
app.get('/render', function(req, res) {
res.render('index', {title: 'res vs app render'})
})
res.render
con tercer 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 archivos de plantilla.can't set headers
significa que no puedes entrar en el cuerpo.res.render()
La función compila su plantilla (no use ejs), inserta locales allí y crea una salida html a partir de esas dos cosas.
// aquí establece que todas las plantillas se encuentran en /views
directorio
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});
Entonces, la ruta de la plantilla es views/
(primera parte) + local
(segunda parte) + .ejs
(tercera parte) ===views/local.ejs