Node.js での HTTP ヘッダー送信エラーの修正

Susan Sarandon
リリース: 2024-10-16 12:23:02
オリジナル
977 人が閲覧しました

Fixing HTTP Headers Sent Errors in Node.js

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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!