ホームページ > 記事 > ウェブフロントエンド > Node.js での HTTP ヘッダー送信エラーの修正
Node.js の ERR_HTTP_HEADERS_SENT 問題を修正する
ERR_HTTP_HEADERS_SENT エラーは、Node.js を使用する開発者にとってよくある落とし穴です。このエラーは通常、サーバーが 1 つの HTTP リクエストに対して複数の応答を送信しようとしたときに発生し、予期しない動作やアプリケーションのクラッシュにつながります。
ERR_HTTP_HEADERS_SENT エラーの主な原因は、res.send()、res.json()、res.redirect() などの応答メソッドの誤用です。コードがこれらのメソッドのいずれかを誤って複数回呼び出すと、サーバーはヘッダーが既に送信された後に追加のヘッダーを送信しようとし、エラーが発生します。
シナリオ例
このエラーがどのように発生するかを示す次のコード スニペットを考えてみましょう。
app.get('/app', async function(req, res) { // Avoid doing this! You must ensure only one response is sent. await User.find({ username: req.headers.username }, function(err, items) { res.send('User data retrieved.'); // First response }); res.send('Hello, World!'); // Second response, leading to ERR_HTTP_HEADERS_SENT }); In this example, the res.send('Hello, World!') call executes after res.send('User data retrieved.'), which triggers the error.
res.redirect を使用した別の例
この問題は、次に示すように、res.redirect メソッドでも発生する可能性があります。
app.get('/app', function(req, res) { // Don't do this! Only one response should be sent. await User.find({ username: req.headers.username }, function(err, items) { res.redirect('/app/login'); // First response }); res.send('Welcome!'); // Second response, which will cause the error
});
適切な解決策
ERR_HTTP_HEADERS_SENT エラーを防ぐには、コードがリクエストごとに 1 つの応答のみを送信するようにしてください。前の例を変更する方法は次のとおりです:
修正例:
app.get('/app', async function(req, res) { const user = await User.find({ username: req.headers.username }); if (user) { res.send('User data retrieved.'); // Send response only once } else { res.redirect('/app/login'); // Or redirect as needed } });
要約すると、応答ロジックを常にチェックして、各リクエストの結果が 1 つの応答のみであることを確認してください。そうすることで、ERR_HTTP_HEADERS_SENT エラーを回避し、Node.js アプリケーションの安定性を維持できます。
以上がNode.js での HTTP ヘッダー送信エラーの修正の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。