我正在编写一个网站,发现这个奇怪的 [Error:Invalid ObjectId] 在我的 console.log 中打印出来,这是发生错误的情况:
1)当我重启节点服务器并重新登录时,在主页,没有这样的错误;但是一旦我第一次点击进入项目页面,我会得到一个
[Error: Invalid ObjectId]
我发现这个错误是由“/items/:id”控制器打印出来的;
我不断刷新页面,再也没有出现过
2) 发生此错误的另一种情况是当我什么都不做时,就像刚才一样,只输入stack-overflow,并且在一定时间内,我会再收到一个这样的错误。这个错误让我很困扰,因为如果我出去1~2个小时,我的开发服务器回来的时候可能会出现20个这样的错误,它会卡住并且没有很快响应(大约需要2分钟才能响应)
我正在使用 Jade、backbone.js、express.js 和猫鼬;但我没有使用像 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函数是一个封装函数,索引页也使用了那个函数,没有报错,所以我觉得跟render()没有关系。
目前,我可以肯定的是,当第一次点击链接时,控制器肯定会被调用两次。第一次调用正常,返回页面,但第二次调用好像是空调用,返回一个空项。
有没有人以前有过这种类似的情况?或者关于如何解决这个问题的一些想法?