2013-04-15 5 views
2

Вот мое приложение 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?

+0

Также в вашей функции 'findUserById': если вы поймаете ошибку, я думаю, вы не будете запрашивать базу данных в любом случае. Вы можете активировать обратный вызов кода дважды. – TheHippo

+0

, поэтому я должен поместить возврат после обратного вызова (err, null) или просто сделать: return callback (err, null); – user824624

+0

Я не вижу, как ваш обновленный код может вызвать эту ошибку, если ваше приложение не содержит больше, чем только этот код, и ошибка возникает где-то там. Трудно отлаживать без дополнительного контекста. – robertklep

ответ

1

Теперь, когда я обновляю версию node.js до последней версии 10.4, проблема, похоже, не повторится, поэтому причина, вероятно, связана с тем, что старая версия node.js не может работать с последней экспресс-версией ,

Я всегда обновляю версию библиотеки, но не оставляю node.js не обновленным.

+0

Я использовал Express 3 вместе с Node 0.8 без проблем, но приятно слышать, что проблема решена сейчас :) – robertklep

Смежные вопросы