Webサイトをコーディングしていますが、この奇妙な[Error:Invalid ObjectId]がconsole.logに出力されていることがわかりました。これは、エラーが発生する状況です。
1)ノードサーバーを再起動して再度ログインすると、ホームページでそのようなエラーは発生しません。しかし、初めてアイテムページをクリックすると、
[Error: Invalid ObjectId]
このエラーは「/items/:id」コントローラーによって出力されることがわかりました。
私は絶えずページを更新しました、そしてそれは二度と起こりませんでした
2)このエラーが発生する別の状況は、今のように何もせず、スタックオーバーフローを入力するだけで、一定時間、このようなエラーがもう1つ発生する場合です。このエラーは気になりました。1〜2時間外出すると、開発サーバーに戻ったときにこのようなエラーが20回発生し、ジャムが発生して応答が遅くなるためです(応答に約2分かかります)。
私はJade、backbone.js、express.js、mongooseを使用しています。しかし、socket.ioのようなものは使用していません。また、バックボーンも一定時間サーバーを呼び出さないと思います。(バックボーンに関する私の知識が間違っていない限り。)
簡略化されたコードは次のとおりです。
1)クリックしたリンク:
a(href!="/items/<%=_id%>") click
2)このエラーを生成するコントローラー:
//GET an item
app.get('/items/:id',function(req,res){
models.ItemModel.findOne({_id:req.params.id},function(err,item){
if (!err){
item.rtime=app.moment(item.ctime).fromNow();
render(req,res,'item.jade',item)
} else
console.log(err)
})
})
レンダリング関数はカプセル化された関数であり、インデックスページもその関数を使用しており、エラーは発生しないため、render()とは関係がないと思います。
現在、私が確信しているのは、リンクが最初にクリックされたときに、コントローラーが確実に2回呼び出されることです。最初の呼び出しは正常でページを返しますが、2番目の呼び出しは空の呼び出しのようで、nullアイテムを返します。
誰かが以前にこのような状況を経験したことがありますか?または、この問題を解決する方法についてのアイデアはありますか?