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

Pwoli.js技术问题:如何在API响应中获取分页信息?

Pwoli.js技术问题:如何在API响应中获取分页信息?

嘿,我来帮你搞定这个分页的问题!在pwoli.js里,默认情况下,API返回的分页相关信息(当前页、总条数、总页数这些)通常不会直接跟数据数组混在一起,而是放在响应头里,或者你可以配置让它出现在响应体的顶层结构中,下面分两种情况给你说明:

情况1:从响应头获取分页信息

pwoli.js默认会把分页数据放在HTTP响应的自定义头里,常见的头字段包括:

  • X-Pagination-Total-Count:总数据条数
  • X-Pagination-Page-Count:总页数
  • X-Pagination-Current-Page:当前页码
  • X-Pagination-Per-Page:每页显示的条数

你可以在请求API的回调里,通过获取响应头来拿到这些信息。举个例子,如果你用axios发送请求的话,代码大概是这样的:

axios.get('/api/companies', { params: { page: 1 } })
  .then(response => {
    // 拿到数据数组
    const companies = response.data;
    // 从响应头获取分页信息
    const totalCount = response.headers['x-pagination-total-count'];
    const totalPages = response.headers['x-pagination-page-count'];
    const currentPage = response.headers['x-pagination-current-page'];
    const perPage = response.headers['x-pagination-per-page'];
    
    // 接下来就可以用这些数据做分页UI啦
    console.log(`当前页:${currentPage},总页数:${totalPages},总条数:${totalCount}`);
  })
  .catch(error => {
    console.error('请求出错:', error);
  });

情况2:配置API让分页信息出现在响应体里

如果你希望分页信息和数据数组一起放在响应体里,那需要在pwoli.js的API控制器里做一点配置。比如在你的CompanyController的actionIndex方法里,修改数据返回的方式:

async actionIndex() {
  const query = Company.find();
  const dataProvider = new ActiveDataProvider({
    query,
    pagination: {
      pageSize: 10, // 每页10条
    },
  });
  // 获取分页对象
  const pagination = dataProvider.pagination;
  // 获取数据列表
  const companies = await dataProvider.getModels();
  // 返回包含分页信息和数据的对象
  return {
    data: companies,
    pagination: {
      currentPage: pagination.page + 1, // 注意pwoli里page是从0开始的,转成从1开始的话要加1
      totalCount: pagination.totalCount,
      totalPages: pagination.pageCount,
      perPage: pagination.pageSize,
    },
  };
}

这样配置之后,你请求API得到的响应就会变成类似这样的结构:

{
  "data": [
    {
      "id": 1,
      "title": "Company - 1",
      // ... 其他字段
    }
  ],
  "pagination": {
    "currentPage": 1,
    "totalCount": 50,
    "totalPages": 5,
    "perPage": 10
  }
}

之后你直接从响应体的pagination字段里就能拿到所有分页信息啦。

另外要注意的是,如果你是用pwoli.js自带的RESTful API生成器,默认是用响应头返回分页信息的,所以第一种方法是最直接的。如果需要自定义响应结构,就用第二种方法修改控制器即可。

备注:内容来源于stack exchange,提问作者Nguyen Chi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:09:34