You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用node-fetch拉取带offset分页规则的API全量数据

分页API全量数据获取实现方案

通用循环实现(兼容任意总条数)

该方案无需手动计算请求次数,会根据接口返回的分页参数自动发起请求,后续总条数变更也不需要修改逻辑:

async function fetchAllData() {
  const limit = 100
  let offset = 0
  // 存储全量数据的数组
  let allData = []
  while(true) {
    const response = await fetch(`${baseUrl}&limit=${limit}&offset=${offset}`, {
      headers: {
        'Content-Type': 'application/json'
      }
    })
    const resData = await response.json()
    // 此处resData.list替换为你接口实际返回条目列表的字段名
    allData = allData.concat(resData.list)
    // 终止请求的判断条件,二选一即可
    // 方案1:用hasMore判断
    if(!resData.hasMore) break
    // 方案2:用totalCount判断,和上面方案选一个用就行
    // if(offset + limit >= resData.totalCount) break
    // 偏移量自增,准备下一页请求
    offset += limit
  }
  // 返回合并后的全量数据
  return allData
}
// 调用方法
const fullData = await fetchAllData()

固定两次请求实现(仅适配当前125条的场景)

如果确认当前总条数只有125条,仅需要两次请求的话可以用简化写法:

// 请求第一页
const res1 = await fetch(`${baseUrl}&limit=100&offset=0`, {
  headers: { 'Content-Type': 'application/json' }
})
const data1 = await res1.json()
// 请求第二页
const res2 = await fetch(`${baseUrl}&limit=100&offset=100`, {
  headers: { 'Content-Type': 'application/json' }
})
const data2 = await res2.json()
// 合并两页数据,list替换为实际接口返回的条目列表字段名
const fullData = [...data1.list, ...data2.list]

注意事项

  • 代码中的条目列表字段list需要替换为你接口实际返回数据列表的对应字段名
  • 生产环境建议添加try/catch块做请求异常捕获,避免单页请求失败导致全量数据获取失败
  • 若接口存在请求频率限制,可在两次请求之间添加适当的延时逻辑

内容的提问来源于stack exchange,提问作者usherTc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:57:05