Sono un principiante Express.js
e sono confuso da queste due parole chiave: res.end()
e res.send()
.
Sono uguali o diversi?
Sono un principiante Express.js
e sono confuso da queste due parole chiave: res.end()
e res.send()
.
Sono uguali o diversi?
Risposte:
res.send()
invierà la risposta HTTP. La sua sintassi è,
res.send([body])
Il parametro body può essere un oggetto Buffer, una stringa, un oggetto o una matrice. Per esempio:
res.send(new Buffer('whoop'));
res.send({ some: 'json' });
res.send('<p>some html</p>');
res.status(404).send('Sorry, we cannot find that!');
res.status(500).send({ error: 'something blew up' });
Vedi questo per maggiori informazioni.
res.end()
terminerà il processo di risposta. Questo metodo in realtà proviene dal Node core, in particolare il response.end()
metodo di http.ServerResponse
. Viene utilizzato per terminare rapidamente la risposta senza dati. Per esempio:
res.end();
res.status(404).end();
Leggi questo per maggiori informazioni.
express
ma dal titolo pensato: uno invia qualcosa, uno finisce qualcosa ... è giusto.
res.send()
con niente. Questo si comporta res.end()
?
Vorrei porre un po 'più di enfasi su alcune differenze chiave tra res.end()
e res.send()
rispetto alle intestazioni di risposta e perché sono importanti.
1. res.send () verificherà la struttura dell'output e imposterà le informazioni dell'intestazione di conseguenza.
app.get('/',(req,res)=>{
res.send('<b>hello</b>');
});
app.get('/',(req,res)=>{
res.send({msg:'hello'});
});
Dove con res.end () puoi solo rispondere con il testo e non imposterà " Content-Type "
app.get('/',(req,res)=>{
res.end('<b>hello</b>');
});
2. res.send () imposterà l'attributo "ETag" nell'intestazione della risposta
app.get('/',(req,res)=>{
res.send('<b>hello</b>');
});
¿Perché questo tag è importante?
L'intestazione della risposta HTTP ETag è un identificatore per una versione specifica di una risorsa. Consente alle cache di essere più efficienti e consente di risparmiare larghezza di banda, in quanto un server Web non deve inviare una risposta completa se il contenuto non è cambiato.
res.end()
NON imposterà questo attributo di intestazione
ciò che fa res.send () è implementare res.write , res.setHeaders e res.end .
controlla quali sono i dati inviati e imposta le intestazioni corrette,
quindi trasmette i dati con res.write e alla fine usa res.end per impostare la fine della richiesta.
ci sono alcuni casi in cui vorrai farlo manualmente, ad esempio se vuoi eseguire lo streaming di file o un set di dati di grandi dimensioni, in questo caso vorrai impostare le intestazioni da solo e utilizzare res.write per mantenere lo stream flusso.
res.end
usato da un semplice nodo doveres.send
è usato da espresso framwork