Mon application Express se bloque après avoir envoyé une réponse au client. Il semble que le code soit toujours exécuté même après son retour.
Veuillez consulter l'extrait de code ci-dessous. S'il vous plaît laissez-moi savoir s'il y a un problème avec ce code. (Ps., Je ne suis pas autorisé à utiliser un modèle d'utilisateur ici.) P> Merci beaucoup! P> P>
3 Réponses :
Vous devez déplacer toute votre logique à l'intérieur de la fonction de rappel, si vous voulez un comportement asynchrone "réel".
const EditUser = async (req, res) => { let result = validateUser(req.body); if(result.error) return res.status(400).send(result.error.details[0].message); let data = req.body; let resp = connection.query(`select * from users where id = ${req.params.id}`, (err, rows) => { if(err) return res.status(500).send('Server side error'); if(rows.length === 0) return res.status(404).send('User not found'); // code gets executed here. // further logic goes here. }) }
Ceci est parce que votre fonction renvoie la réponse deux fois. Vous pouvez utiliser if / ele> strong> em> ou rappel strong> em> déclaration pour gérer cela. Utilisation de if- sinon em> p> en utilisant rappel em> p>
Vous pouvez utiliser Je ne connais pas la structure de réponse exacte, mais vous pouvez en faire référence et personnaliser votre fonction en fonction de vos besoins. P> p> async / attendre code>, car votre fonction utilise déjà
async code> afin que vous puissiez implémenter ce code comme:
Pouvez-vous partager le message d'erreur?
Bien sûr, c'est le message d'erreur: erreur [err_http_headers_sent]: impossible de définir des en-têtes après leur envoi au client.
Vous obtenez cette erreur car votre fonction peut avoir renvoyé une réponse plus d'une fois.
Au lieu de rappeler, vous pouvez utiliser attendre dans la connexion.Query pour simplifier le processus.