web-dev-qa-db-fra.com

Quelle est la difference entre res.send et res.write in express?

Je suis débutant à express.js et j'essaie de comprendre la différence entre res.send et res.write?

27
PG1

res.send

  • res.send est uniquement dans Express js.
  • Effectue de nombreuses tâches utiles pour des réponses simples sans diffusion en continu.
  • Possibilité d'affecter automatiquement le champ d'en-tête de réponse HTTP Content-Length.
  • Capacité à fournir un support automatique HEAD & fraîcheur du cache HTTP.
  • Explication pratique

    • res.send Ne peut être appelé qu'une seule fois, car cela équivaut à res.write + res.end()
    • Exemple

      app.get('/user/:id', function (req, res) {
          res.send('OK');
      });
      

pour plus de détails expressjs.com/fr/api.html


res.write

  • Peut être appelé plusieurs fois pour fournir des parties successives du corps.
  • Exemple

    response.write('<html>');
    response.write('<body>');
    response.write('<h1>Hello, World!</h1>');
    response.write('</body>');
    response.write('</html>');
    response.end();
    

Pour plus de détails
nodejs.org/docs
nodejs.org/fr/docs/guides

55
Omal Perera

res.send Équivaut à res.write + res.end Ainsi, la différence clé est que res.send Ne peut être appelé qu'une seule fois, alors que res.write Peut être appelé plusieurs fois, suivi de res.end.

Mais à part cela, res.send Fait partie d’Express. Il peut détecter automatiquement la longueur de l'en-tête de la réponse. Avec res.send (), il peut y avoir un risque de pic de mémoire, notre application s'interposant entre les fichiers volumineux.

6
Keerti

ne des différences les plus importantes pas indiqué dans aucune des réponses sont "drainantes".

Le res.write peut retourner vrai ou faux. Dès la documentation:

Renvoie true si toutes les données ont été vidées avec succès dans la mémoire tampon du noyau. Retourne false si tout ou partie des données ont été mises en file d'attente dans la mémoire de l'utilisateur. 'drain' sera émis lorsque le tampon sera à nouveau libre.

Donc, en faisant res.write, l'appelant doit attendre jusqu'à ce que l'événement de drain soit émis si le res.write est retourné faux.

Tout cela est traité automatiquement dans res.send. Le compromis est la mise en mémoire tampon que vous devrez faire lors de l'utilisation de ce dernier.

3
Charlie