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
相关产品推荐
相关产品推荐

