web-dev-qa-db-fra.com

Quelle est la différence entre res.end () et res.send ()?

Je suis un débutant en Express.js et je suis dérouté par ces deux mots-clés: res.end() et res.send().

Sont-ils pareils ou différents?

111
sudheeshcm

res.send() enverra la réponse HTTP. Sa syntaxe est la suivante:

res.send([body])

Le paramètre body peut être un objet Buffer, une chaîne, un objet ou un tableau. Par exemple:

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' });

Voir this pour plus d'informations.

res.end() mettra fin au processus de réponse. Cette méthode provient en fait de Node core, en particulier de la méthode response.end() de http.ServerResponse. Il est utilisé pour terminer rapidement la réponse sans aucune donnée. Par exemple:

res.end();
res.status(404).end();

Lire this pour plus d'informations.

101
BIBIN K ONANKUNJU

Je souhaiterais mettre un peu plus l'accent sur certaines différences essentielles entre res.end() & res.send() en ce qui concerne les en-têtes de réponse et leur importance.

1. res.send () vérifiera la structure de votre sortie et définira les informations d'en-tête en conséquence.


    app.get('/',(req,res)=>{
       res.send('<b>hello</b>');
    });

enter image description here


     app.get('/',(req,res)=>{
         res.send({msg:'hello'});
     });

enter image description here

Où avec res.end (), vous ne pouvez répondre qu'avec du texte sans définir " Content-Type "

      app.get('/',(req,res)=>{
           res.end('<b>hello</b>');
      }); 

enter image description here

2. res.send () définira l'attribut "ETag" dans l'en-tête de la réponse

      app.get('/',(req,res)=>{
            res.send('<b>hello</b>');
      });

enter image description here

¿Pourquoi cette balise est-elle importante?
L'en-tête de réponse HTTP ETag est un identifiant pour une version spécifique d'une ressource. Cela permet aux caches d'être plus efficaces et d'économiser de la bande passante, puisqu'un serveur Web n'a pas besoin d'envoyer une réponse complète si le contenu n'a pas changé.

res.end() ne définira PAS cet attribut d'en-tête

63
Jorge González

ce que res.send () fait, c'est d'implémenter res.write, res.setHeaders et res.end.
il vérifie ce que les données que vous envoyez et définissez les en-têtes corrects,

puis son flux les données avec res.write, et à la fin il utilise res.end pour définir la fin de la demande.

dans certains cas, vous voudrez le faire manuellement, par exemple si vous voulez diffuser un fichier ou un ensemble de données volumineux. Dans ce cas, vous voudrez définir les en-têtes par vous-même et utiliser le fichier res.write afin de conserver le flux. couler.

4
Amit Wagner