API Delete By Query работает как curl, но не в Node-Red - PullRequest
1 голос
/ 10 апреля 2019

Справочная информация: Я пытаюсь добиться удаления нескольких значений из эластичного объекта с помощью одного вызова API.Наше приложение использует Node-Red для создания бэкэнд-API.

Я использую приведенную ниже команду curl для удаления нескольких идентификаторов документов, и она работает как шарм.Он удаляет документы, найденные с идентификаторами xxxxx и yyyyy.

POST /tom-access/doc/_delete_by_query
{
  "query": {
    "terms": {
      "_id": [
        "xxxxx",
        "yyyyy"
      ]
    }
  }
}

Однако, когда я пытаюсь сделать то же самое через Node-Red (используя функцию JavaScript), я получаю ошибку ниже.

{"error": {"root_cause": [{"type": "action_request_validation_exception", "reason": "Ошибка проверки: 1: запрос отсутствует;"}], "type": "action_request_validation_exception", "reason": "Ошибка проверки: 1: запрос отсутствует;"}, "status": 400}

Вот что у меня внутри функции Node-Red JavaScript:

if (!msg.headers) msg.headers = {};
msg.req = {
  "query": {
    "terms": {
      "id": [
        "xxxxx",
        "yyyyy"
      ]
    }
  }  
};
msg.headers = {
          "Content-Type": "application/json",
          "Authorization" : "Basic xxxxxxxxxxxxxxxxxxxxx"
          };
msg.method = "POST"

// New elastic
msg.url = "http://elastic.test.com/tom-access/doc/_delete_by_query";
return msg;

Следующий узел выполняет HTTP-вызов, используя объект msg выше, но приводит к ошибке, упомянутой выше.Я новичок в Node-Red, JavaScript и Elastic, а также.HEEELP !!!

1 Ответ

2 голосов
/ 10 апреля 2019

Конечная точка, вероятно, ожидает, что запрос будет в теле запросов.

Вы должны установить его под msg.payload, а не msg.req.

...