私はElasticSearchでExpress.js/Node.jsアプリケーションを実行しています。同じインデックス内の複数のタイプの結果を表示しようとしています。私がここで行うことは、検索クエリを実行し、クエリの結果に基づいて2番目の検索クエリが実行されます。私はelasticsearchがnode.jsコンソールを観察することによってプレーヤーの結果を返すことがわかります。しかし、私の結果オブジェクト/配列には挿入されません。私は2つの検索と表示の結果を1つとして実行する必要があるので、私はエクスプレスミドルウェアを使用しています。express.jsルートでreqオブジェクトに複数の結果を挿入する
ルート/ 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()は、検索結果を取得する前に呼び出されます。 – Aynolor
@Aynolorはあなたの次が間違っていると言っています。 それ以外に、私はデータを収集するために複数のミドルウェアを使うのは良いアプローチだとは思わない。 [aycnc](https://github.com/caolan/async)ライブラリを試しましたか?このユースケースでは、 'waterfall'メソッドが当てはまります。 –
@Aynolor、@ Talha:次はどこに置くべきですか?私は結果をレンダリングする前にsearchPlayerの呼び出しを終了したいと思っています。私は非同期を探します。 – akalanka