Как правильно перечислить все индексы эластичного поиска из node.js - PullRequest
0 голосов
/ 25 сентября 2019

В моем приложении node.js я пытаюсь создать список всех индексов эластичного поиска и отправить этот список в виде JSON в мое приложение Angular.Я использую модульasticsearch.js:

npm install elasticsearch

const elasticsearch = require('elasticsearch');
const client = new elasticsearch.Client({
  host: 'localhost:9200',
  log: 'trace'
});

Затем в своем обработчике маршрута REST API я проверяю связь с Flexiblesearch и выполняю запрос, который предполагает возвращение всех индексов:

indexRoutes.route('/').get(function (req, res) {
  client.ping({
    requestTimeout: 30000,
  }, function (error) {
    if (error) {
      console.error('elasticsearch cluster is down!');
    } else {
      console.log('All is well');
      client.cat.indices({format: 'json'})
          .then(console.log(index));
    }
  });
});

Я предполагаю, что, как только обещание будет выполнено, из него будет возвращен объект, поэтому я называю этот объект как "индекс", но только получение индекса "ошибка не определена".

Как правильно получить такой список и присвоить результат строке?

1 Ответ

1 голос
/ 25 сентября 2019
client.cat.indices({format: 'json'})
.then(console.log(index));

должно быть

client.cat.indices({format: 'json'})
.then((yourResponse) => {
  console.log(yourResponse);
});

или более непосредственно

client.cat.indices({format: 'json'})
.then(console.log); // notice I pass the function itself, I don't call it

Promise.prototype.then принимает обратный вызов в качестве аргумента - то есть функцию, которая вызывается, когда обещание в конечном итоге выполняется,Ваш код говорит: «позвоните console.log и передайте возвращаемое значение Promise.prototype.then».

Он падает, потому что вы не ссылаетесь на объект как index, вы получаете доступ к indexпеременная, которая (очевидно) никогда не объявлялась.

В показанной мной версии yourResponse объявляется как первый (и единственный) параметр анонимной функции стрелки (в форме (...) => {...}), которая передается вPromise.prototype.then.Таким образом, yourResponse здесь заполняется результатом вызова на .then, когда его обещание выполняется.

...