繁体   English   中英

node.js中超出了最大调用堆栈大小

[英]Maximum call stack size exceeded in node.js

这是我的带mongodb的node.js应用程序,代码自爆效果很好,只需通过用户会话ID从mongodb数据库中加载用户信息,会话存储就是connect-mongo的 MongoStore。 最初,此node.js部署在我的计算机本地。

但是,当我单击浏览器以非常快地刷新页面时,在单击几下(单击20,30次)后,它将引发异常,并提示未捕获的异常:RangeError:超出最大调用堆栈大小 ,有时还会显示另一个错误,说错误:connect-mongo上没有打开的连接

app.get('/',homePage);

function homePage(req,res){
    var locals = {};    

    userModel.findUserById(req.session.uid,function(err,user){
                    if(err) {
                        console.log('user uid not found'.red);
                    }
                    else{
                        console.log('find user uid'.green,user._id);
                        locals.user = {
                           username: user.username,
                           email: user.email
                        };
                        res.send(200);
                    }
    })  
}

这是userModel调用的findUserById,位于另一个文件中。

function findUserById(id,callback){
        var id;
        try {
             id = mongoose.Types.ObjectId(id);
        } catch(e) {
                callback(err, null);
        }

        UserModel.findById(id,function(err, doc){
            if(err){callback(err, null);}
            else{
                callback(null, doc);
            }
        })  
    }

我不知道真正出了什么问题,是connect-mongo还是其他什么,我发现超出最大调用堆栈大小的错误是由于递归,但是我在这里显示的代码没有递归。

更新:

app.get('/',homePage);

function homePage(req,res){
    var locals = {};    
    res.send(200);
}

即使在这种情况下,多次单击后,服务器也会抛出一个错误,即超出最大调用堆栈大小

我猜是因为我的node.js版本和表达不够兼容吗? 我的Express版本是3.1.0,但是我的node.js版本是0.8.20?

现在,当我将node.js版本更新为最新版本10.4时,似乎不再出现此问题,原因可能是因为旧的node.js版本无法与最新的Express版本一起使用。

我总是更新库版本,但不更新node.js。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM