nsw与mock 模拟分页接口
安装依赖
项目中使用到一下依赖,请提前安装
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 模拟分页接口的更多相关文章
- Mock模拟后台数据接口--再也不用等后端的API啦
ok,在开发中经常需要从后台获取数据,那么有时候后台的数据接口并没有写好,所以这时候,就需要自己模拟数据接口,来实现前端逻辑, 今天数的就是阿里巴巴的一款mock产品,很好用的哦!!!! ok!这是我 ...
- 使用electron开发一个h5的客户端应用创建http服务模拟后台接口mock
使用electron开发一个h5的客户端应用创建http服务模拟后端接口mock 在上一篇<electron快速开始>里讲述了如何快速的开始一个electron的应用程序,既然electr ...
- Easy-Mock模拟get接口和post接口实例
1.先创建项目,再新建接口 创建项目入口:首页右下角 + 按钮 创建接口入口如下图: 关于mock的语法这里不做说明,可查看mock.js官方查看更详情的资料. 小tip:在Easy-Mock里面支持 ...
- 使用whistle模拟cgi接口异常:错误码、502、慢网速、超时
绝大多数程序只考虑了接口正常工作的场景,而用户在使用我们的产品时遇到的各类异常,全都丢在看似 ok 的 try catch 中.如果没有做好异常的兼容和兜底处理,会极大的影响用户体验,严重的还会带来安 ...
- 深入浅出的webpack4构建工具---比mock模拟数据更简单的方式(二十一)
如果想要了解mock模拟数据的话,请看这篇文章(https://www.cnblogs.com/tugenhua0707/p/9813122.html) 在实际应用场景中,总感觉mock数据比较麻烦, ...
- wiremock 模拟服务接口提供前端使用
前后端分离同步开发时,如果前端需要等后端把接口都开发完了再去动工的话,项目周期会拉长. 以前开发时,一般前期是先把接口文档写的差不多了,要么是让前端自己构造模拟数据,要么是后端在开个控制器专门提供模拟 ...
- Python 的mock模拟测试介绍
如何不靠耐心测试 可能我们正在写一个社交软件并且想测试一下"发布到Facebook的功能",但是我们不希望每次运行测试集的时候都发布到Facebook上. Python的unitt ...
- dotnet 如何在 Mock 模拟 Func 判断调用次数
在 dotnet 程序有很好用的 Mock 框架,可以用来模拟各种接口和抽象类,可以用来测试某个注入接口的被调用次数和被调用时传入参数.本文告诉大家如何在 Mock 里面模拟一个 Func 同时模拟返 ...
- Mock模拟数据,前后端分离
安装 使用npm安装: npm install mockjs; 或直接<script src="http://mockjs.com/dist/mock.js">< ...
- vue-cli实现异步请求返回mock模拟数据
在前后端分离开发的过程中,前端开发过程中,页面的数据显示一般都是写死的静态数据,也就是没有经过接口,直接写死在代码中的,在后端给出接口后,再替换为接口数据,为了减少对接成本,mock就出现了.通过预先 ...
随机推荐
- @PathVaribale
/** * @pathVaribale * 作用: 用于获取url 中的占位符的值. * 例如:请求 url 中 /delete/{id},这个{id}就是 url 占位符. * url 支持占位符是 ...
- H5 ios端微信浏览器下-底部工具固定方法
在外层配置css position: fixed; width: 100%; top: 0px; bottom: 0px; overflow: auto; 结束
- SpringBoot整合Redis日志反复提示Redis重连问题
1. 报错信息如图: 2. 原因: spring boot 2.0之后spring-boot-starter-data-redis默认不再使用jedis连接redis,而是lettuce 这是lett ...
- jmeter操作数据库增删改查的注意事项
一,场景 1.在jmeter造数据后,可通过数据库查询数据库是否新增数据,判断脚本执行是否成功. 2.有些数据新增不可重复,因此脚本执行后需要将新增的数据删除,才能再次执行脚本. 二.连接数据库 在通 ...
- dbeaver导入sql脚本报错的排查—— ERROR 1366 (HY000) at line
描述 在使用dbeaver进行sql脚本导入的时候报了以下的错误. C:\Users\xxxx\AppData\Roaming\DBeaverData\drivers\clients\mysql_8\ ...
- Axure RP中后台管理系统通用原型模板元件库
Axure RP中后台管理系统通用原型方案 v2是一套通用型的中后台信息系统原型方案,可以快速扩展并输出标准美观的中后台产品原型,极大的提升输出效率和节省协作成本.方案中提供了几十套不同风格和结构的系 ...
- 由 Array.includes 函数引发对引用数据类型的思考
`` 数组的includes方法在日常的编程中比较常用到,其作用就是判断某一数据是否在数组中,通常来说,数组中的数据如果是数字,布尔值,或者字符串的话,都是能够进行判断的 例如: [1,2,3,4]. ...
- 游戏开发godot+mcp等于事半功倍,分享一下如何安装godot相关的mcp及有何作用
游戏开发godot+mcp等于事半功倍,分享一下如何安装godot相关的mcp及有何作用 总结 视频讲解: https://www.bilibili.com/video/BV1P9jRzXEXU 在使 ...
- 循环神经网络(RNN)模型
一.概述 循环神经网络(Recurrent Neural Network, RNN)是一种专门设计用于处理序列数据(如文本.语音.时间序列等)的神经网络模型.其核心思想是通过引入时间上的循环连接, ...
- Spring Boot MyBatis使用type-aliases-package自定义类别名
摘要:介绍MyBatis 中 type-aliases-package 属性的作用.在Spring Boot项目中,使用属性type-aliases-package为MyBatis引用的实体类自定义别 ...