Задний план: Чего я пытаюсь добиться, так это удалить несколько значений из эластичного с помощью одного вызова 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":"Validation Failed: 1: query is missing;"}],"type":"action_request_validation_exception","reason":"Validation Failed: 1: query is missing;"},"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. НЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕСЬ
Конечная точка, вероятно, ожидает, что запрос будет в теле запросов.
Вы должны установить его под msg.payload
, а не msg.req
.