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

Mirage JS后端模拟问题:如何在createList生成响应后添加分页数据

在Mirage JS中为响应添加分页数据

我来帮你搞定这个问题!想要在Mirage JS返回的响应里加上分页信息(比如page和total),你只需要自定义路由的处理函数,手动构造返回的响应对象就行,不用直接返回createList的结果。

方法一:固定分页信息(适合简单场景)

如果只是需要固定返回page:1和total:10,直接在路由里把createList生成的列表和分页字段一起返回就好:

import { createServer, Model, createList } from "miragejs";

createServer({
  models: {
    user: Model,
  },

  routes() {
    this.namespace = 'api';

    this.get('/users', () => {
      // 生成3个用户数据
      const users = createList('user', 3);
      // 构造包含分页信息的响应
      return {
        users: users,
        page: 1,
        total: 10
      };
    });
  },
});

方法二:支持动态分页(更实用的场景)

如果需要根据前端传入的page参数返回对应页的数据,同时返回真实的总数据量,可以这样写:

import { createServer, Model, createList } from "miragejs";

createServer({
  models: {
    user: Model,
  },

  // 先预生成10个用户数据,对应total:10
  seeds(server) {
    server.createList('user', 10);
  },

  routes() {
    this.namespace = 'api';

    this.get('/users', (schema, request) => {
      // 获取前端传入的page参数,默认显示第1页
      const currentPage = parseInt(request.queryParams.page) || 1;
      // 定义每页显示的条数
      const perPage = 3;
      // 获取所有用户的总数量
      const totalUsers = schema.users.all().length;
      // 计算当前页数据的起始和结束索引
      const startIdx = (currentPage - 1) * perPage;
      const endIdx = startIdx + perPage;
      // 截取当前页的用户数据
      const paginatedUsers = schema.users.all().models.slice(startIdx, endIdx);

      // 返回最终的响应格式
      return {
        users: paginatedUsers,
        page: currentPage,
        total: totalUsers
      };
    });
  },
});

这样一来,当你请求/api/users时会返回第1页的3条数据,同时带上page:1和total:10;如果请求/api/users?page=2,就会返回第4-6条数据,page字段也会变成2,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:38:11