Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js中超出了最大调用堆栈大小_Node.js - Fatal编程技术网

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

node.js中超出了最大调用堆栈大小,node.js,Node.js,这是我的node.js应用程序和mongodb,代码运行良好,只需通过用户会话id从mongodb数据库加载用户信息,会话存储区是MongoStore。最初,这个node.js在我的计算机中本地部署 然而,当我点击浏览器以快速刷新页面时,在点击几次(20,30次)后,它会抛出一个异常,说 未捕获异常:RangeError:超过最大调用堆栈大小 有时,它还会显示另一个错误,即错误:connect mongo上没有打开的连接 app.get('/',homePage); function home

这是我的node.js应用程序和mongodb,代码运行良好,只需通过用户会话id从mongodb数据库加载用户信息,会话存储区是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还是其他什么问题,我发现超出最大调用堆栈大小的错误是因为递归,但我在这里展示的代码没有递归

更新:

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


我想这是因为我的node.js版本和express不够兼容吧?我的express版本是3.1.0,但我的node.js版本是0.8.20?

现在,当我将node.js版本更新到最新版本10.4时,问题似乎不会再次出现,因此原因可能是旧的node.js版本无法与最新的express版本一起工作


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

同样在
findUserById
函数中:如果您发现错误,我猜您无论如何都不会查询数据库。代码回调可能会触发两次,所以我应该在回调之后加上一个返回(err,null),或者像这样做:returncallback(err,null);我不知道你的更新代码是如何导致错误的,除非你的应用程序包含的不仅仅是这些代码,而且错误发生在其中的某个地方。在没有更多上下文的情况下很难调试。请移动try-catch块中的所有代码。如果抛出错误,它不会走到这一步。谢谢,这是一个很好的建议我已经将Express 3与节点0.8一起使用,没有任何问题,但很高兴听到问题现在已经解决:)
app.get('/',homePage);

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