nodejs firebase error RangeError: la taille maximale de la stack d’appels a été dépassée

J’ai une erreur de la base de feu:

AVERTISSEMENT FIREBASE: Une exception a été levée par rappel de l’utilisateur. RangeError: taille maximale de la stack d’appels dépassée

Je n’ai pas trouvé mon erreur.

Je suis très perdu ici, aidez s’il vous plaît.

Mon code ressemble à ceci:

app.post('/updateCoords', (req, res)=>{ var usrID = req.body.id; var usrCoords = { lat: req.body.lat, long: req.body.long } console.log('userID : '+usrID+' lat : '+usrCoords.lat+' long : '+usrCoords.long); var ref = database.ref('users'); try{ ref.orderByChild('username').equalTo(usrID).on("value", (snapshot)=> { if(!snapshot.val()){ // Error return res.json({msg: 'username is not in D.B', success: false}); } // Success admin.database().ref('users/' + usrID + '/currentLocation').update({ lat: usrCoords.lat, long: usrCoords.long }); return res.json({msg: 'user coords changed', success: true}); }); }catch(ex){ console.log('ex /updateCoords = '+ex); } }); 

Vous mettez à jour le même nœud que vous lisez. Cela provoque à nouveau le rappel on("value" . Ce qui écrit à son tour une nouvelle valeur, qui déclenche à nouveau le rappel. Et cela continue jusqu’à ce que le runtime manque d’espace dans la stack d’appels.

La solution la plus simple consiste à utiliser once() au lieu de on() :

  var ref = database.ref('users'); try{ ref.orderByChild('username').equalTo(usrID).once("value", (snapshot)=> { if(!snapshot.val()){ checker = true; } if(snapshot.val()){ admin.database().ref('users/' + usrID + '/currentLocation').update({ lat: usrCoords.lat, long: usrCoords.long }); return res.json({msg: 'user coords changed', success: true}); // checker = false; } // res.json({msg: 'username is not in D.B', success: false}); }); }catch(ex){ console.log('ex /updateCoords = '+ex); }