node.js - nodejs firebase 错误 RangeError : Maximum call stack size exceeded failure

标签 node.js express firebase-realtime-database firebase-admin

我有一个来自 firebase 的错误:

FIREBASE WARNING: Exception was thrown by user callback. RangeError: Maximum call stack size exceeded

我没有发现我的错误。

我很迷茫,请帮忙。

我的代码如下所示:

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

最佳答案

您正在更新您正在阅读的同一 Node 。这会导致再次触发 on("value" 回调。然后写入一个新值,这会再次触发回调。一直持续到运行时用完调用堆栈空间。

最简单的解决办法是用once()代替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);
    }

关于node.js - nodejs firebase 错误 RangeError : Maximum call stack size exceeded failure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41880933/

相关文章:

javascript - Mongoose 从远程服务器获取外部数据

java - 根据 Firebase 的最新日期将数据排序到 RecyclerView

java - 从 firebase 检索数据后需要反转 ListView

javascript - Node.js Mongodb-原生驱动连接共享

javascript - React Native 上的 git clone 错误如何解决这个问题

javascript - 如何使用 nodeJs 将 jsreport 渲染保存到文件?

javascript - 通过帖子消息发送代码不起作用

node.js - npm 安装在 nodemon@1.18.9 安装后脚本失败

javascript - PHP 包含 Nodejs 中标记的等效项

javascript - Firebase 发生更改事件。如何知道谁更改了数据?