安装依赖

项目中使用到一下依赖,请提前安装

npm install msw lodash axios

开启mock

定义mock,创建 src/mock/index.ts

import _ from "lodash";
import Mock from "mockjs";
import { http, HttpResponse } from "msw";
import { setupWorker } from "msw/browser"; /**
* 处理数组,以便于模拟分页
* @param {Array} dataSource - 数据源数组
* @param {Object} params - 分页参数
* @param {number} params.current - 当前页码
* @param {number} params.pageSize - 每页条数
* @returns {Object} 包含分页数据和分页信息的对象
*/
const paginate = (dataSourceTemp, { current = 1, pageSize = 10 } = {}) => {
const dataSource = _.cloneDeep(dataSourceTemp); // 确保 current 和 pageSize 是有效的数字
current = Math.max(1, parseInt(current) || 1);
pageSize = Math.max(1, parseInt(pageSize) || 10); // 计算起始索引和结束索引
const startIndex = (current - 1) * pageSize;
const endIndex = startIndex + pageSize; // 获取当前页数据
const data = dataSource.slice(startIndex, endIndex); return {
data,
pagination: {
current,
pageSize,
total: dataSourceTemp.length,
pages: Math.ceil(dataSource.length / pageSize),
},
};
}; // 模拟数据库
const dataBase = Mock.mock({
"user|20-30": [
{
"id|+1": 1, // 自增ID
name: "@cname", // 中文姓名
"age|18-60": 1, // 18-60岁的随机年龄
"salary|1000-5000": 1, // 随机薪资
address: "@county(true)", // 随机地址
},
],
}); // 定义统一返回格式(对,就像你真的在写接口一样)
const JsonResult = {
error(msg: string) {
return HttpResponse.json({
code: 0,
msg,
});
},
sucess(data) {
return HttpResponse.json({
code: 1,
data,
});
},
}; // 处理器
const handlers = [
http.get("/api/user", ({ request }) => {
const url = new URL(request.url);
// 获取特定的查询参数
const current = Number(url.searchParams.get("current"));
const pageSize = Number(url.searchParams.get("pageSize"));
return JsonResult.sucess({
total: dataBase.user.length,
list: paginate(dataBase.user, { current, pageSize }).data,
});
}),
]; export const enableMocking = async () => {
if (process.env.NODE_ENV !== "development") return;
const worker = setupWorker(...handlers);
await worker.start({
onUnhandledRequest(request, print) {
// 决定如何对未处理的请求做出反应: 如果url不包含/api的内容 就返回,否则就警告
if (request.url.indexOf("/api") === -1) return;
print.warning();
},
});
};

并在项目入口中启用,以 (vite 创建的 )vue 项目为例

import { createApp } from "vue";
import App from "./App.vue";
import { enableMocking } from "./mock"; enableMocking().then(() => {
const app = createApp(App);
app.use(ArcoVue);
app.mount("#app");
});

页面使用

同样在 vue 项目的基础上,使用了arco design

home.vue

<template>
<a-table
:columns="columns"
:data="dataRender"
:pagination="pagination"
@page-change="onPageChange"
/>
</template> <script setup lang="ts">
import { reactive, ref } from "vue";
import axios from "axios"; // 分页信息
const pagination = reactive({
current: 1,
pageSize: 8,
total: 5,
showTotal: true,
}); // 表头
const columns = [
{
title: "姓名",
dataIndex: "name",
},
{
title: "年龄",
dataIndex: "age",
},
{
title: "工资",
dataIndex: "salary",
},
{
title: "住址",
dataIndex: "address",
},
]; // 请求接口
const dataRender = ref([]);
const syncDataRender = async () => {
const {
data: { data },
} = await axios.get("/api/user", {
params: {
current: pagination.current,
pageSize: pagination.pageSize,
},
});
dataRender.value = data.list;
pagination.total = data.total;
};
syncDataRender(); // 监听翻页
const onPageChange = async (current) => {
pagination.current = current;
syncDataRender();
};
</script>

nsw与mock 模拟分页接口的更多相关文章

  1. Mock模拟后台数据接口--再也不用等后端的API啦

    ok,在开发中经常需要从后台获取数据,那么有时候后台的数据接口并没有写好,所以这时候,就需要自己模拟数据接口,来实现前端逻辑, 今天数的就是阿里巴巴的一款mock产品,很好用的哦!!!! ok!这是我 ...

  2. 使用electron开发一个h5的客户端应用创建http服务模拟后台接口mock

    使用electron开发一个h5的客户端应用创建http服务模拟后端接口mock 在上一篇<electron快速开始>里讲述了如何快速的开始一个electron的应用程序,既然electr ...

  3. Easy-Mock模拟get接口和post接口实例

    1.先创建项目,再新建接口 创建项目入口:首页右下角 + 按钮 创建接口入口如下图: 关于mock的语法这里不做说明,可查看mock.js官方查看更详情的资料. 小tip:在Easy-Mock里面支持 ...

  4. 使用whistle模拟cgi接口异常:错误码、502、慢网速、超时

    绝大多数程序只考虑了接口正常工作的场景,而用户在使用我们的产品时遇到的各类异常,全都丢在看似 ok 的 try catch 中.如果没有做好异常的兼容和兜底处理,会极大的影响用户体验,严重的还会带来安 ...

  5. 深入浅出的webpack4构建工具---比mock模拟数据更简单的方式(二十一)

    如果想要了解mock模拟数据的话,请看这篇文章(https://www.cnblogs.com/tugenhua0707/p/9813122.html) 在实际应用场景中,总感觉mock数据比较麻烦, ...

  6. wiremock 模拟服务接口提供前端使用

    前后端分离同步开发时,如果前端需要等后端把接口都开发完了再去动工的话,项目周期会拉长. 以前开发时,一般前期是先把接口文档写的差不多了,要么是让前端自己构造模拟数据,要么是后端在开个控制器专门提供模拟 ...

  7. Python 的mock模拟测试介绍

    如何不靠耐心测试 可能我们正在写一个社交软件并且想测试一下"发布到Facebook的功能",但是我们不希望每次运行测试集的时候都发布到Facebook上. Python的unitt ...

  8. dotnet 如何在 Mock 模拟 Func 判断调用次数

    在 dotnet 程序有很好用的 Mock 框架,可以用来模拟各种接口和抽象类,可以用来测试某个注入接口的被调用次数和被调用时传入参数.本文告诉大家如何在 Mock 里面模拟一个 Func 同时模拟返 ...

  9. Mock模拟数据,前后端分离

    安装 使用npm安装: npm install mockjs; 或直接<script src="http://mockjs.com/dist/mock.js">< ...

  10. vue-cli实现异步请求返回mock模拟数据

    在前后端分离开发的过程中,前端开发过程中,页面的数据显示一般都是写死的静态数据,也就是没有经过接口,直接写死在代码中的,在后端给出接口后,再替换为接口数据,为了减少对接成本,mock就出现了.通过预先 ...

随机推荐

  1. @PathVaribale

    /** * @pathVaribale * 作用: 用于获取url 中的占位符的值. * 例如:请求 url 中 /delete/{id},这个{id}就是 url 占位符. * url 支持占位符是 ...

  2. H5 ios端微信浏览器下-底部工具固定方法

    在外层配置css position: fixed; width: 100%; top: 0px; bottom: 0px; overflow: auto; 结束

  3. SpringBoot整合Redis日志反复提示Redis重连问题

    1. 报错信息如图: 2. 原因: spring boot 2.0之后spring-boot-starter-data-redis默认不再使用jedis连接redis,而是lettuce 这是lett ...

  4. jmeter操作数据库增删改查的注意事项

    一,场景 1.在jmeter造数据后,可通过数据库查询数据库是否新增数据,判断脚本执行是否成功. 2.有些数据新增不可重复,因此脚本执行后需要将新增的数据删除,才能再次执行脚本. 二.连接数据库 在通 ...

  5. dbeaver导入sql脚本报错的排查—— ERROR 1366 (HY000) at line

    描述 在使用dbeaver进行sql脚本导入的时候报了以下的错误. C:\Users\xxxx\AppData\Roaming\DBeaverData\drivers\clients\mysql_8\ ...

  6. Axure RP中后台管理系统通用原型模板元件库

    Axure RP中后台管理系统通用原型方案 v2是一套通用型的中后台信息系统原型方案,可以快速扩展并输出标准美观的中后台产品原型,极大的提升输出效率和节省协作成本.方案中提供了几十套不同风格和结构的系 ...

  7. 由 Array.includes 函数引发对引用数据类型的思考

    `` 数组的includes方法在日常的编程中比较常用到,其作用就是判断某一数据是否在数组中,通常来说,数组中的数据如果是数字,布尔值,或者字符串的话,都是能够进行判断的 例如: [1,2,3,4]. ...

  8. 游戏开发godot+mcp等于事半功倍,分享一下如何安装godot相关的mcp及有何作用

    游戏开发godot+mcp等于事半功倍,分享一下如何安装godot相关的mcp及有何作用 总结 视频讲解: https://www.bilibili.com/video/BV1P9jRzXEXU 在使 ...

  9. 循环神经网络(RNN)模型

    一.概述   循环神经网络(Recurrent Neural Network, RNN)是一种专门设计用于处理序列数据(如文本.语音.时间序列等)的神经网络模型.其核心思想是通过引入时间上的循环连接, ...

  10. Spring Boot MyBatis使用type-aliases-package自定义类别名

    摘要:介绍MyBatis 中 type-aliases-package 属性的作用.在Spring Boot项目中,使用属性type-aliases-package为MyBatis引用的实体类自定义别 ...