Maison > interface Web > js tutoriel > Pourquoi est-ce que j'obtiens une erreur « Impossible de définir les en-têtes après leur envoi » dans Node.js/Express ?

Pourquoi est-ce que j'obtiens une erreur « Impossible de définir les en-têtes après leur envoi » dans Node.js/Express ?

DDD
Libérer: 2024-12-29 19:40:11
original
534 Les gens l'ont consulté

Why Do I Get a

Erreur : "Impossible de définir les en-têtes après leur envoi" dans Node.js/Express

Cette erreur se produit lorsque vous tentez de définir les en-têtes après l'envoi de la réponse. été envoyé au client. Dans Node.js et Express, il existe certaines règles concernant l'ordre dans lequel les méthodes de réponse peuvent être appelées :

Head State : Avant que res.writeHead() ne soit appelé, seul res.setHeader () et des fonctions similaires peuvent être utilisées pour définir des en-têtes.

Body State : Après l'appel de res.writeHead(), le les en-têtes ne peuvent plus être modifiés. Seuls res.write() et res.end() peuvent être utilisés pour écrire des données dans le corps de la réponse.

Dans le code fourni, l'erreur se produit car une redirection est tentée après que les en-têtes de réponse aient déjà été envoyés. par res.writeHead(). Plus précisément, le code suivant est à l'origine du problème :

res.redirect("/great");
Copier après la connexion

Pour résoudre ce problème, la redirection doit être effectuée avant l'appel de res.writeHead(). Voici comment le code peut être modifié :

app.get('/auth/facebook', function(req, res) {
  req.authenticate("facebook", function(error, authenticated) {
    if (authenticated) {
      res.writeHead(200, { 'Content-Type': 'text/plain' });
      res.redirect("/great");
      console.log("ok cool.");
      console.log(res['req']['session']);
    }
  });
});
Copier après la connexion

En effectuant cette modification, la redirection sera tentée avant l'envoi des en-têtes de réponse, empêchant ainsi l'erreur de se produire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal