这是我的node.js应用程序与mongodb,代码自爆效果很好,只是通过用户会话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版本并且表达不够兼容?我的快递版本是3.1.0,但我的node.js版本是0.8.20?
答案 0 :(得分:1)
现在,当我将node.js版本更新到最新版本10.4时,问题似乎不再发生,所以原因可能是因为旧的node.js版本无法使用最新的快速版本。
我总是更新库版本,但是没有更新node.js。