【发布时间】:2020-03-25 22:50:53
【问题描述】:
我正在创建一个 REST API,它从 Internet 获取原始数据,然后对其应用正则表达式并以 JSON 格式返回。
这是我将数据获取为 JSON 的函数。
首先,我使用 got() 获取原始数据,而不是应用 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]
};
}
在此端点中,我从第一个函数中检索数据并解析 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 对象条目)并且请求需要很长时间才能返回并显示数组
我想要做的是每次调用函数或到达端点时返回该数组的一个块。
尝试了几种方法,但都没有任何意义。
有人有想法吗?
【问题讨论】:
-
您需要 JSON5,还是实际上只是 JSON?
-
我建议根本不要解析和重新字符串化 JSON 文本。只需直接发送
appData字符串,只需确保设置像res.json这样的内容类型标头即可。 -
不是每个请求都调用一次 getAnimeList
-
@Bergi :是的,我可以做到。但我的问题是返回的数组很大,返回响应需要很多时间。我想知道是否有一种方法可以在每次调用函数时仅获取部分数据(例如,每次按下按钮时都会加载更多数据而不是整个数据)
-
这将取决于您的
getAnimeList函数,尤其是您自己从中获取数据的 API 是否支持这一点。但是,是的,一般来说是可以的,它被称为“分页”。
标签: javascript node.js json asynchronous