为什么不会触发水线回调?

时间:2015-06-20 19:37:58

标签: node.js sails.js waterline sails-mongo

我正在使用内置模型的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.82.0.33模块失败时。我更新了两个版本,特别是sails-mongo到0.11.x分支。

真的不仅要解决这个问题,还要知道原因。我试图复制错误,但现在它正在工作,而不是两天。

编辑2(语法错误或错误?)

我无法通过尝试不同的模块版本来复制错误。但是,也很奇怪,我已经确定哪种代码样式不起作用(没有回调发生)。

没有执行回调,导致超时:

  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

编辑3失败时找到。

实际进行修改时会失败。

因此,只要进行匹配,即使执行数据库修改,也不会触发callaback。如果找不到匹配更新,则将执行回调。

我已经在package.json中使用mongodb模块测试了这个,其中包含0.11.2,0.10.6和0.10.8版本的sails-mongo,并且发现了相同的问题。

0 个答案:

没有答案