ホームページ >ウェブフロントエンド >jsチュートリアル >Node.js/Express で「送信後にヘッダーを設定できません」というエラーが表示されるのはなぜですか?

Node.js/Express で「送信後にヘッダーを設定できません」というエラーが表示されるのはなぜですか?

DDD
DDDオリジナル
2024-12-29 19:40:11542ブラウズ

Why Do I Get a

エラー: Node.js/Express の「送信後にヘッダーを設定できません」

このエラーは、応答がすでに送信された後にヘッダーを設定しようとすると発生しますクライアントに送信されました。 Node.js と Express では、応答メソッドを呼び出す順序に関して特定のルールがあります:

ヘッド状態: res.writeHead() が呼び出される前に、res.setHeader のみが呼び出されます。 () および同様の関数を使用してヘッダーを設定できます。

Body State: res.writeHead() の後が呼び出されると、ヘッダーは変更できなくなります。応答本文にデータを書き込むために使用できるのは res.write() と res.end() のみです。

提供されたコードでは、応答ヘッダーがすでに送信された後にリダイレクトが試行されるため、エラーが発生します。 res.writeHead() による。具体的には、次のコードが問題の原因となります。

res.redirect("/great");

これを修正するには、res.writeHead() が呼び出される前にリダイレクトを実行する必要があります。コードの変更方法は次のとおりです。

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

この変更を行うと、応答ヘッダーが送信される前にリダイレクトが試行され、エラーの発生が防止されます。

以上がNode.js/Express で「送信後にヘッダーを設定できません」というエラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。