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

npm install elasticsearch

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

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

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
Eugene Goldberg 25 Сен 2019 в 19:31

1 ответ

Лучший ответ
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, вы получаете доступ к переменной index, который был (видимо) никогда не объявил.

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

3
Stock Overflaw 25 Сен 2019 в 19:51