Как передать ответ API, а не загружать его в оперативную память - PullRequest
1 голос
/ 28 июня 2019

У меня есть API, который представляет большой набор данных.Первоначально этот набор данных был управляемым, но он растет с каждым днем ​​и начинает перегружать сервер, вызывая тайм-ауты и медленный ответ.В настоящее время API загружает весь ответ в память перед отправкой клиенту.Вместо этого я хотел бы передать ответ, как только смогу.

Я следовал интерактивному руководству по созданию этого API, отсюда: https://www.freecodecamp.org/news/how-to-build-blazing-fast-rest-apis-with-node-js-mongodb-fastify-and-swagger-114e062db0c9/

Я изменил егочтобы соответствовать моим данным, и это работало достаточно хорошо.Тем не менее, я пытался заставить его транслировать ответ сейчас, и я откровенно столкнулся со стеной.Кажется, я не могу принять много, много примеров онлайн того, как это сделать, в мой код.

Это то, что я пытаюсь изменить.

// Get All Metars
exports.getmetars = async (req, reply) => {
  try {
    const flights = await metars.find()
    return flights
  } catch (err) {
    throw boom.boomify(err)
  }
}

Этот код в настоящее время загружает все данные в ОЗУ перед отправкой.Как мне транслировать его вместо этого?

1 Ответ

0 голосов
/ 28 июня 2019

Вы можете выполнять потоковую передачу, но вам, вероятно, также понадобится включить разбиение на страницы, фильтрацию и / или сортировку на конечной точке. Исходя из статьи, на которую вы ссылаетесь, я предполагаю, что вы используете Mongoose.

Посмотрите на этот потоковый пакет JSON.stringify . Внизу файла readme приведен пример Mongoose . Для вас это будет выглядеть примерно так:

// Get All Metars
exports.getmetars = (req, reply) => {
  try {
    new JsonStreamStringify(metars.find().stream()).pipe(reply)
  } catch (err) {
    throw boom.boomify(err)
  }
}

Ссылочный ответ: https://stackoverflow.com/a/53852868/30697

Также см .: Поток от курсора mongodb до экспресс-ответа в node.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...