Sails.js 长时间运行的查询SailsJS上的空响应

Sails.js 长时间运行的查询SailsJS上的空响应,sails.js,Sails.js,我目前正在Raspberry Pi上运行SailsJS,一切都很好,但是当我执行sails.models.nameofmodel.count()时,当我尝试以结果响应时,最终得到的是一个空响应 getListCount: function(req,res) { var mainsource = req.param("source"); if(mainsource) { sails.m

我目前正在Raspberry Pi上运行SailsJS,一切都很好,但是当我执行sails.models.nameofmodel.count()时,当我尝试以结果响应时,最终得到的是一个空响应

getListCount: function(req,res)
    {
            var mainsource = req.param("source");

            if(mainsource)
            {
                sails.models.gatherer.find({source: mainsource}).exec(
                        function(error, found)
                        {
                                if(error)
                                {
                                        return res.serverError("Error in call");
                                }
                                else
                                {
                                        sails.log("Number found "+found.length);
                                        return res.ok({count: found.length});
                                }
                        }   
                );
        }
        else
        {
                return res.ok("Error in parameter");
        }   
},
我能在日志中看到找到的号码(73689)。然而,当我回应时,我仍然得到一个空的回应。我使用的是默认的stock ok.js文件,不过我还是加入了额外的日志记录,以尝试调试并确保它通过了正确的路径。我能够确认ok.js正在通过这个路径

if (req.wantsJSON) {
    return res.jsonx(data);
}

在发送res.send()而不是res.ok()之前,我还尝试将.populate()添加到.exec()之前的调用中,res.status(200)。我还将Sails更新为11.5,仍然得到相同的空响应。我还使用了sails.models.gatherer.count()调用,结果相同。

您可以尝试在方法的开头添加一些日志记录,以捕获
mainsource
的值。我认为您不需要对任何响应对象调用使用显式的
返回

如果所有这些看起来都正常,请尝试消除模型的find方法,只计算请求参数并返回一个简单的响应:

getListCount: function(req, res) {
    var mainsource = req.param("source");
    sails.log("Value of mainsource:" + mainsource);

    if (mainsource) {
      res.send("Hello!");
    } else {
      res.badRequest("Sorry, missing source."); 
    }
}
如果这不起作用,那么您的模型数据实际上可能与您提供的标准不匹配,问题可能就在那里;在这种情况下,您的响应将为空。您提到在log语句中确实可以看到查询的结果计数。如果
res.badRequest
也为空,则安装在
sailsjs
中的
express
版本可能有问题。您提到您拥有
sailsjs
11.5
。我假设你的意思是
0.11.5

这是在
0.11.5

   "express": "^3.21.0",
检查GitHub问题中有关
sailsjs
express
和响应对象处理以及上述版本的
express
的任何可能的错误

可能值得使用最新的
sailsjs
版本(
0.12.0
)执行一次干净的安装,看看这是否解决了您的问题

另一个问题可能是您如何处理响应。在这种情况下,
.exec
应立即执行查询(即同步调用),并在完成时返回响应。所以这里不应该有异步处理

如果您可以显示使用响应的代码,那将很有帮助。我假设有一个视图通过AJAX或正在执行的某种表单POST显示响应。如果您看到的是空响应,那么问题可能在于视图层,而不是控制器/模型


如果您的查询通过HTTP返回一个真正的超时错误,即使您的查询及时返回结果,那么您可能需要考虑使用<代码> SARJJS 的异步处理。请看这篇关于使用a的帖子。

您不应该在每个
res.ok()调用之前包含
return
,如文档中所述吗?
res.serverError()
也一样。请看这里:我确实将其添加到回调中,但仍然得到一个空响应错误。当您使用res.ok()或res.serverError()时,它进入响应,在响应中使用return res.jsonx(数据)。如果您添加了
return
,请将其添加到上面的帖子中好吗?另外,请显示您是如何调用
getListCount
。我将其放在routes.js'/getListCount':{controller:'GathererController',action:'getListCount'}中,请参见下面我的答案。