- Puoi chiamare app.render a livello di root e res.render solo all'interno di una route/middleware.
app.render
restituisce sempre l'html nella funzione di callback, mentreres.render
lo fa solo quando hai specificato la funzione di callback come terzo parametro. Se chiamires.render
senza il terzo parametro/funzione di callback l'html reso viene inviato al client con un codice di stato pari a 200.
Dai un'occhiata ai seguenti esempi.
app.render
app.render('index', {title: 'res vs app render'}, function(err, html) {
console.log(html)
});
res.render
senza terzo parametro
app.get('/render', function(req, res) {
res.render('index', {title: 'res vs app render'})
})
res.render
con terzo parametro
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
utilizzaapp.render
internamente per eseguire il rendering dei file modello.can't set headers
significa che non puoi entrare nel corpo.res.render()
la funzione compila il tuo modello (per favore non usare ejs), inserisce i locali lì e crea un output html da queste due cose.
// qui imposti che tutti i modelli si trovano in /views
directory
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});
Quindi, il percorso del modello è views/
(prima parte) + local
(seconda parte) + .ejs
(terza parte) ===views/local.ejs