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