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 "Impossible de définir les en-têtes après leur envoi" donné par Node.js. Alors, comment vérifier si des en-têtes ont déjà été envoyés?
EDIT: à partir d'Express 4.x, vous devez utiliser res.headersSent. Notez également que vous souhaiterez peut-être utiliser setTimeout avant de vérifier, car il n'est pas défini sur true 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.
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
Le nœud prend en charge le res.headersSent
ces jours-ci, vous pouvez/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: c'est la manière préférée de le faire, par rapport à l'ancienne propriété Connect 'headerSent' que Niko mentionne.
D'autres réponses pointent vers des sites Web Node.js ou Github.
Ci-dessous, le 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
});