Как анализировать данные Json по частям в NodeJs - PullRequest
1 голос
/ 30 ноября 2019

Я создаю REST API, который получает необработанные данные из Интернета, затем применяет к ним REGEX и возвращает его в формате JSON.

Это моя функция для получения данных в виде JSON.
сначалаЯ использую функцию get () для получения необработанных данных, а не ANIME_LIST_REGEX.exec () для фильтрации по регулярному выражению в формате JSON.

async function getAnimeList(url) {
const {body} = await got(url);

let ANIME_LIST_DATA = ANIME_LIST_REGEX.exec(body)

if (!ANIME_LIST_DATA) {
    return null;
}

return {
    animeList: ANIME_LIST_DATA[1]
};

}

в этой конечной точке я получаю данные из 1-й функции и анализирую JSON, возвращая их как ответ.

app.get('/anime-list', async (req, res, next) => {
    const appData = await getAnimeList(URL_BASE_ANIME_LIST);
    var listJson = JSON5.parse(appData.animeList)
    res.json(listJson)
})

Проблема в том, что возвращаемый массив довольно большой (5000 записей объектов js) и запрос занимает много времени, чтобы вернуться и показать массив
Что я хочу сделать, это возвращать кусок этого массива каждый раз, когда я вызываю функцию или достигаю конечной точки.
Пробовал несколько методов, но ни один из нихимеет смысл.
Кто-нибудь есть идея?

1 Ответ

0 голосов
/ 01 декабря 2019

Вы можете разбить большой массив на небольшой фрагмент с помощью Array.prototype.splice () . Чтобы определить диапазон чанка, вы можете передать запросы конечной точке.

app.get("/anime-list", async (req, res, next) => {
  const appData = await getAnimeList(URL_BASE_ANIME_LIST)
  var listJson = JSON5.parse(appData.animeList)

  const from = req.query.from || 0
  const count = req.query.count || 100
  res.json(listJson.splice(from, count))
})

Однако, как упоминают другие, вызов getAnimeList() для запроса вызовет еще одну проблему с производительностью. Я настоятельно рекомендую вам реорганизовать функцию для кэширования результата.

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