2

これがmongodbを使用した私のnode.jsアプリケーションです。コードはうまく機能し、ユーザーセッション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バージョンとexpressの互換性が十分でないためだと思いますか?Express のバージョンは 3.1.0 ですが、node.js のバージョンは 0.8.20 ですか?

4

1 に答える 1

1

現在、node.js のバージョンを最新バージョンの 10.4 に更新したところ、問題は再発していないようです。その理由は、古い node.js バージョンが最新の Express バージョンで動作しないことが原因である可能性があります。

ライブラリのバージョンは常に更新していますが、node.js は更新されていません。

于 2013-04-15T11:25:50.507 に答える