Node.js/Express.js では、応答オブジェクト (res) で次のことが許可されます。リクエスト処理の特定の段階でのみ特定のメソッドが呼び出されるようにします。そのようなステージの 1 つは「ヘッド」ステージであり、このステージでは、res.setHeader() などのメソッドを使用してヘッダーを設定できます。ただし、「Body」ステージに入ると、ヘッダーを設定できなくなります。
発生しているエラー (「エラー: できません」)クライアントに送信された後にヘッダーを設定する」)は、応答がすでに「本文」ステージに入った後にヘッダーを設定しようとしていることを示唆しています。この問題を解決するには、応答にデータが書き込まれる前に、「Head」ステージでヘッダーが設定されていることを確認する必要があります。
あなたの特定のケースでは、res を呼び出しているためにエラーがスローされます。認証ミドルウェア関数内の redirect() 。これにより、応答が送信され、「Body」ステージに移動します。その結果、エラーがスローされ、Express がエラー ページを送信しようとすると、ヘッダーを設定できなくなったため失敗します。
この問題を解決するには、ミドルウェア内で next() 関数を使用して、チェーン内の次のミドルウェアまたは Express ルーターに制御します。これにより、エラーが適切に処理され、適切な応答が送信されるようになります。
app.get('/auth/facebook', function(req, res, next) { req.authenticate("facebook", function(error, authenticated) { if (authenticated) { res.redirect("/great"); console.log("ok cool."); console.log(res['req']['session']); } else { next(error); // Pass the error to the error-handling middleware } }); });
エラーをエラー処理に渡すことにより、ミドルウェアを使用すると、「送信後にヘッダーを設定できません」エラーが発生することなく、適切なエラー応答が確実に送信されるようになります。
以上がNode.js/Express.js で「ヘッダーがクライアントに送信された後にヘッダーを設定できません」というエラーが表示されるのはなぜですか?どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。