我正在使用内置模型的Sails,它是执行MongoDB查询和操作的ORM。我得到的问题是,对于某些查询方法,它的回调永远不会被调用。数据库操作完成,但回调不会出现。以下代码片段是模型查询API控制器方法的一部分,这就是我使用response
对象的原因。
LineUp.update({ id: request.param('id') },
{ players: [], budgetLeft: 60000000 }).
exec(function (err, lineup) {
console.log("Should happen");
return err ? response.send(500) : response.json(lineup);
});
所以,我读过Sails docs,看来我实际上正在按照预期进行,但它不会起作用。
通过不起作用,我的意思是回调没有被执行,我永远看不到应该发生,然后任何响应被发送回客户端,在客户端达到502超时。
我注意到并发现这是一个sails-mongo
问题。
我首先在"sails-mongo": "^0.10.6"
中使用package.json
作为依赖项,并在此版本的最后一个版本中将mongodb作为dev依赖项。
我用邮递员测试了整个代码,我没有注意到任何问题。在npm安装运行后,我开始注意到它失败了,然后我发现这是回调问题。
将sails-mongo
更新为^0.11.2
之后,我可以看到它是如何简单地恢复增益的。但是,当它不工作时,我可以看到其他模型查询。
在登台服务器上(可悲的是没有工作)我有sails-mongo ^0.10.8
和
2.0.33
模块失败时。我更新了两个版本,特别是sails-mongo到0.11.x分支。
我真的不仅要解决这个问题,还要知道原因。我试图复制错误,但现在它正在工作,而不是两天。
我无法通过尝试不同的模块版本来复制错误。但是,也很奇怪,我已经确定哪种代码样式不起作用(没有回调发生)。
没有执行回调,导致超时:
LineUp.update({ id: request.param('id') }, { players: [], budgetLeft: 60000000 })
.exec(function(err, lineup) { return err ? response.send(500) : response.json(lineup)});
反对,下面的这个版本的简单结帐将使其工作:
正常工作,执行回调,然后执行任何超时但服务器响应正常:
LineUp.update({id: request.param('id')}, { players: [], budgetLeft: 60000000 }).
exec(function (err, lineups) {
console.log("Happens");
console.log(lineups);
return err ? response.send(500) : response.json(lineups);
});
但是,呃,不一样!?
可能的错误。 I submitted this as an issue on github
实际进行修改时会失败。
因此,只要进行匹配,即使执行数据库修改,也不会触发callaback。如果找不到匹配更新,则将执行回调。
我已经在package.json中使用mongodb模块测试了这个,其中包含0.11.2,0.10.6和0.10.8版本的sails-mongo,并且发现了相同的问题。