Maison >interface Web >js tutoriel >Correction des erreurs d'envoi des en-têtes HTTP dans Node.js

Correction des erreurs d'envoi des en-têtes HTTP dans Node.js

Susan Sarandon
Susan Sarandonoriginal
2024-10-16 12:23:021077parcourir

Fixing HTTP Headers Sent Errors in Node.js

Correction des erreurs d'envoi des en-têtes HTTP dans Node.js

Correction du problème ERR_HTTP_HEADERS_SENT dans Node.js
L'erreur ERR_HTTP_HEADERS_SENT est un piège courant pour les développeurs travaillant avec Node.js. Cette erreur se produit généralement lorsqu'un serveur tente d'envoyer plusieurs réponses pour une seule requête HTTP, ce qui entraîne un comportement inattendu et des plantages d'application.

Quelles sont les causes de cette erreur ?

La principale cause de l'erreur ERR_HTTP_HEADERS_SENT est l'utilisation abusive de méthodes de réponse telles que res.send(), res.json() ou res.redirect(). Lorsque votre code appelle par inadvertance l'une de ces méthodes plus d'une fois, le serveur tente d'envoyer des en-têtes supplémentaires après qu'ils aient déjà été envoyés, ce qui entraîne l'erreur.

Exemple de scénario
Considérez l'extrait de code suivant, qui montre comment cette erreur peut se produire :

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.

Un autre exemple avec res.redirect
Le problème peut également survenir avec la méthode res.redirect, comme indiqué ci-dessous :

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

});

Solution appropriée
Pour éviter l'erreur ERR_HTTP_HEADERS_SENT, assurez-vous que votre code n'envoie qu'une seule réponse pour chaque requête. Voici comment vous pouvez modifier les exemples précédents :

Exemple corrigé :

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

Conclusion

En résumé, vérifiez toujours votre logique de réponse pour vous assurer que chaque demande n'entraîne qu'une seule réponse. Ce faisant, vous pouvez éviter l'erreur ERR_HTTP_HEADERS_SENT et maintenir la stabilité de votre application Node.js.

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!

Déclaration:
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