1 votes

Problème de redirection de Node.JS vers un nouveau point de terminaison api après avoir appelé la fonction

J'essaie de créer un point de terminaison qui met à jour un fichier à l'aide d'une requête post, puis redirige vers la page d'accueil. Mais la redirection ne fonctionne pas.

Cependant, lorsque je commente "await sendMsg()", la redirection fonctionne bien.

Pourriez-vous m'aider à repérer et à résoudre le problème ?

Merci d'avance !

app.get('/add', async function(req, res){

    await sendMsg();
    res.redirect('/');

});

app.post('/update', async function(req, res){

    const {data} = req.body;

    async function writeData(data) {
        try { 
            return fs.writeFileSync(__dirname + '/config/' + 'task.json', JSON.stringify(data), 'utf8');
        }     
        catch (err) { 
            console.log('Problem writing to file.')
        }
    }

    await writeData(data);

});

async function sendMsg(){

    var pURL = 'http://localhost:6500/update';
    ...
    ...
    await fetch(pURL, {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json' 
        },
        body: JSON.stringify({data:config})
    }) 
    .catch(err => console.log(err));

}

0 votes

S'agit-il d'un ajout ou d'une mise à jour ?

0 votes

Qu'entendez-vous par "la redirection ne fonctionne pas" ? Avez-vous obtenu une erreur ? Mettez un console.log() avant la redirection pour voir si cela est exécuté.

0 votes

Il ne redirige pas vers la page suivante après l'exécution de la fonction.

1voto

JaivBhup Points 110

Pour attendre une fonction, il faut que cette fonction renvoie une promesse. Vous avez besoin que sendMsg() soit terminé avant de pouvoir rediriger.

app.get('/add', async function(req, res){
   try{
    await sendMsg();
    res.redirect('/');
   }catch(e){
    //Error in sendMsg()
    console.log(e)
   }

});

async function sendMsg(){
   return new Promise((resolve, reject)=>{
     var pURL = 'http://localhost:6500/update';
     ...
     ...
     fetch(pURL, {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json' 
        },
        body: JSON.stringify({data:config})
     }) 
     .then(response => { // <---------- Little Change ----------
         resolve()
     })
     .catch(err => {
       console.log(err)
       reject()
      });

    })

}

0 votes

Très, très utile, mais toujours le même problème

0 votes

Voyez-vous des messages d'erreur ? Si oui, que disent-ils ?

0 votes

La fonction sendMsg() fonctionne correctement. Mais je ne sais pas comment l'appeler correctement à l'intérieur du point de terminaison "add".

0voto

Vakindu Points 183

Merci à tous !

J'ai oublié de mettre res.end() à la fin du post API 'update'.

Merci pour votre aide.

Le code de travail :

app.get('/add', async function(req, res){

   try {
        await sendMsg();
    } catch(e) {
        console.log(e);
   }

   res.redirect('/');

});

app.post('/update', async function(req, res){

    const {data} = req.body;

    async function writeData(data) {
        try { 
            return fs.writeFileSync(__dirname + '/config/' + 'task.json', JSON.stringify(data), 'utf8');
        }     
        catch (err) { 
            console.log('Problem writing to file.')
        }
    }

    await writeData(data);

    res.end();

});

async function sendMsg(){
   return new Promise((resolve, reject)=>{
     var pURL = 'http://localhost:6500/update';
     ...
     ...
     fetch(pURL, {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json' 
        },
        body: JSON.stringify({data:config})
     }) 
     .then(response => { // <---------- Little Change ----------
         resolve()
     })
     .catch(err => {
       console.log(err)
       reject()
      });

    })

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X