【发布时间】:2017-03-10 14:03:02
【问题描述】:
我正在使用 ElasticSearch 运行 Express.js/Node.js 应用程序。我正在尝试查看同一索引中多种类型的结果。我在这里所做的是运行搜索查询并根据查询结果执行第二个搜索查询。通过观察 node.js 控制台,我也可以看到 elasticsearch 为玩家返回的结果。但它们没有插入到我的结果对象/数组中。我正在使用 express 中间件,因为我必须执行两个搜索并将结果显示为一个。
routes/index.js
function searchTeam(req, res, next){
searchModuleTeams.searchTeams(req.body, function(data) {
req.teams = data;
next();
});
}
function searchPlayer(req, res, next){
//req.players = [];
req.teams.forEach(function(team){
req.body = {searchTerm:team._source.shortName};
searchModulePlayers.searchPlayers(req.body, function(data){
req.players.push(data);
console.log(req.players);
});
});
next();
}
function renderResults(req, res){
res.render('index',{
title:'Search Teams and Players',
teams:req.teams,
players:req.players
});
}
router.post('/search-tp',searchTeam, searchPlayer, renderResults);
我通过阅读post1 和post2 提出了这个解决方案。我可以显示团队数组。但是没有任何东西来自玩家数组。我在这里做错了什么。
【问题讨论】:
-
在
searchPlayer()中,next()在你得到搜索结果之前被调用。 -
正如@Aynoror 所说,您的下一个放置错误。除此之外,我认为使用多个中间件来收集数据并不是一个好方法。你试过aycnc图书馆吗?对于这个用例,它的
waterfall方法很合适。 -
@Aynolor ,@Talha:我应该在哪里放置下一个()。我真的很想在渲染结果之前完成对 searchPlayer 的调用。同时我会寻找异步。
标签: javascript node.js express elasticsearch