これが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 ですか?