Вот мое приложение node.js с mongodb, код взлетает хорошо, просто загружает информацию пользователя из базы данных mongodb через идентификатор сеанса пользователя, а хранилище сеансов - MongoStore от connect-mongo. Первоначально этот node.js локально развертывается на моем компьютере.Максимальный размер стека вызовов превышен в node.js
Однако, когда я нажал на браузер, чтобы страница обновляется очень быстро, после нескольких кликов (20,30 кликов) он будет бросать исключение, говоря неперехваченного исключения: RangeError: Максимальный размер стеки вызовов превысил и иногда, кроме того, показывают другую ошибку, говоря об ошибке: нет открытых соединений на Connect-Монго
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);
}
})
}
Вот в findUserById вызывается в userModel, который находится в другом файле.
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);
}
})
}
Я не знаю, что на самом деле идет не так, это соединить-Монго или что-то еще, я не нашел ошибки максимального размера стека вызовов превышены из-за рекурсии, но код, который я показал здесь не имеет рекурсии.
update:
app.get('/',homePage);
function homePage(req,res){
var locals = {};
res.send(200);
}
даже в этой ситуации, после нажмите быстро во много раз, сервер также будет бросать ошибку Максимального размера стеки вызовов превысило
Я предполагаю, что это из-за мой узел. js версия и выразить несовместимо достаточно? моя экспресс-версия 3.1.0, но моя версия node.js 0.8.20?
Также в вашей функции 'findUserById': если вы поймаете ошибку, я думаю, вы не будете запрашивать базу данных в любом случае. Вы можете активировать обратный вызов кода дважды. – TheHippo
, поэтому я должен поместить возврат после обратного вызова (err, null) или просто сделать: return callback (err, null); – user824624
Я не вижу, как ваш обновленный код может вызвать эту ошибку, если ваше приложение не содержит больше, чем только этот код, и ошибка возникает где-то там. Трудно отлаживать без дополнительного контекста. – robertklep