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

时间:2016-02-08 02:49:17

标签: sails.js

我目前正在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)。但是在回复时我仍然得到一个空的回复。我正在使用默认库存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()调用,结果相同。

1 个答案:

答案 0 :(得分:0)

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

如果所有看起来都正常,请尝试消除模型的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."); 
    }
}

如果这不起作用,那么您的模型数据实际上可能与您提供的标准不匹配,问题可能就在那里;在这种情况下,您的响应将为null。您提到您确实在日志语句中看到了查询的结果计数。如果res.badRequest也为空,那么express中安装的sailsjs版本可能会出现问题。您提到11.5 sailsjs。我会假设你的意思是0.11.5

这是package.json

0.11.5中的内容
   "express": "^3.21.0",

检查sailsjs关于express和响应对象处理以及express的上述版本的GitHub问题中是否存在任何可能的错误。

使用最新的sailsjs版本(0.12.0)执行全新安装可能是值得的,看看是否能解决您的问题。

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

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

如果您通过HTTP遇到真正的超时错误,即使您的查询及时返回结果,那么您可能需要考虑使用sailjs的异步处理。请使用Promise来查看此帖子。