0
votes

Ne peut pas retourner après avoir envoyé une réponse

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. XXX

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.)

Merci beaucoup!


4 commentaires

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.


3 Réponses :


1
votes

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


0 commentaires

1
votes

Ceci est parce que votre fonction renvoie la réponse deux fois. Vous pouvez utiliser if / ele> ou rappel déclaration pour gérer cela.

Utilisation de if- sinon xxx

en utilisant rappel xxx


0 commentaires

0
votes

Vous pouvez utiliser async / attendre , car votre fonction utilise déjà async afin que vous puissiez implémenter ce code comme: xxx

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.


0 commentaires