95 votes

Express.js - Comment vérifier si les en-têtes ont déjà été envoyés ?

J'écris une bibliothèque qui peut définir des en-têtes. Je veux donner un message d'erreur personnalisé si les en-têtes ont déjà été envoyés, au lieu de le laisser échouer avec le message "Can't set headers after they are sent" donné par Node.js. Alors comment vérifier si les en-têtes ont déjà été envoyés ?

216voto

Willem Mulder Points 5014

Node prend en charge la fonction res.headersSent ces jours-ci, vous pourriez/devriez donc l'utiliser. Il s'agit d'un booléen en lecture seule indiquant si les en-têtes ont déjà été envoyés.

if(res.headersSent) { ... }

Voir http://nodejs.org/api/http.html#http_response_headerssent

Remarque : il s'agit de la meilleure façon de procéder, par rapport à l'ancienne propriété Connect 'headerSent' mentionnée par Niko.

74voto

Niko Points 16715

EDIT : depuis express 4.x, vous devez utiliser res.headersSent. Notez également que vous pouvez utiliser setTimeout avant de vérifier, car il n'est pas mis à vrai immédiatement après un appel à res.send(). Source

Simple : La classe Response de Connect fournit une propriété publique "headerSent".

res.headerSent est une valeur booléenne qui indique si les en-têtes ont déjà été envoyés au client.

Extrait du code source :

/**
   * Provide a public "header sent" flag
   * until node does.
   *
   * @return {Boolean}
   * @api public
   */

  res.__defineGetter__('headerSent', function(){
    return this._header;
  });

https://github.com/senchalabs/connect/blob/master/lib/patch.js#L22

14voto

D'autres réponses renvoient à des sites web Node.js ou Github.

Le texte ci-dessous est tiré du site Web d'Expressjs : https://expressjs.com/en/api.html#res.headersSent

app.get('/', function (req, res) {
  console.log(res.headersSent); // false
  res.send('OK');
  console.log(res.headersSent); // true
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X