Sails.js 长时间运行的查询SailsJS上的空响应
我目前正在Raspberry Pi上运行SailsJS,一切都很好,但是当我执行sails.models.nameofmodel.count()时,当我尝试以结果响应时,最终得到的是一个空响应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
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'}中,请参见下面我的答案。