Как сделать так, чтобы новый клиент elasticsearch node.js возвращал только тело в обещаниях? - PullRequest
1 голос
/ 29 мая 2020

"Возвращаемое значение вызова API больше не будет телом, statusCode и заголовками для обратных вызовов, а будет только телом для обещаний. Новое возвращаемое значение будет уникальным объектом, содержащим тело, statusCode, заголовки, предупреждения. , и meta, как для обратного вызова, так и для обещаний. "

Это проблема, если я преобразовываю в строку и сохраняю результат в redis (теперь мне нужно JSON выполнить синтаксический анализ, когда я получу значение из redis). Могу ли я как-нибудь включить режим "только тело" на обещаниях?

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

В качестве обходного пути вы можете перезаписать / проксировать метод search() вашего Client -экземпляра. Таким образом, вы можете определить свой прокси с помощью чего-то вроде:

function initializeSearchProxy(client) {
    const origSearch = client.search;
    client.search = async function () {
        const {body} = await origSearch.apply(this, arguments);
        return body;
    }
}

Затем инициализируйте свой прокси-сервер поиска после запроса и создания экземпляра elasticsearch- Client,

const {Client} = require('@elastic/elasticsearch');
const client = new Client({node: 'http://localhost:9200'});
initializeSearchProxy(client);
...
// all client.search calls now return the body directly
0 голосов
/ 29 мая 2020

К сожалению, нет. Невозможно получить только тело. Как вы упомянули, это будет ответ,

{
  body: object | boolean
  statusCode: number
  headers: object
  warnings: [string]
  meta: object
}

Лучшее, что вы можете сделать, прежде чем сохранять ответ в Redis, вы можете сохранить его вот так:

const {body} = await client.search({
  index: 'my-index',
  body: { foo: 'bar' }
})
// Now you can store the body in Redis

Или когда вы получите объект ответа от Redis, вы можете это сделать,

const {body}=JSON.parse(fetchFromRedis(id));
...