0801ajax_mock-网络ajax请求1-react-仿低代码平台项目
0 vite配置proxy代理
vite.config.ts代码如下图所示:
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";// https://vite.dev/config/
export default defineConfig({plugins: [react()],server: {proxy: {"/api": {target: "http://localhost:3001",changeOrigin: true,},},},
});
1 搭建mock服务
1.1 mock作用
- 工作中,经常前后端并行开发
- 前后端商议好API格式,双方各自开发,前端使用mock服务模拟
- 前后端开发完,在对接联调
1.2 技术选型
- 使用mockjs,直接使用
- 使用nodejs服务+ mockjs
- 使用在线mock平台
1.3 mockjs
使用:
- 前端代码引入mockjs
- 定义要模拟的路由、返回结果
- mockjs劫持ajax请求,得到模拟的结果
演示:
_mock/index.ts如下所示:
import Mock from "mockjs";Mock.mock("/api/test", "get", () => {return {errno: 0,data: {name: `张三 ${Date.now()}`,},};
});
Home.tsx中演示,如下:
...
useEffect(() => {// fetch("/api/test")// .then((res) => res.json())// .then((data) => console.log("fetch data: ", data));// mockjs 只能拦截XMLHttpRequest,不能拦截fetch请求// mockjs 内部使用XMLHttpRequest API axios.get("/api/test").then((res) => console.log("axios data ", res));}, []);...
效果如下图所示:

使用总结
- 只能拦截XMLHttpRequest,不能拦截fetch请求,有局限
- 要在生产环境注释掉,否则线上请求也被劫持
- 结论:不建议在项目中直接使用mockjs
1.4 nodejs+mockjs
nodejs做服务端情况下使用mockjs
- mockjs两大功能:劫持ajax+ 全面的Random能力
- 把mockjs用户nodejs服务端,使用Random能力
1.4.1 mock模拟请求
第一步:初始化项目questionnaire-mock
npm init -y
第二步:安装不要依赖
npm add mockjs --save
第三步:创建两个mockjs文件,test.js和question.js
const Mock = require('mockjs')const Random = Mock.Randommodule.exports = [{url: '/api/test',method: 'get',response() {return {errno: 0,data: {name: Random.cname()}}}}
]
const Mock = require('mockjs')const Random = Mock.Randommodule.exports = [{url: '/api/question/:id',method: 'get',response() {return {errno: 0,data: {id: Random.id(),title: Random.ctitle()}}}}
]
1.4.2 koa框架开发web服务
第一步:安装依赖
npm install koa koa-router --save
第二步:koa配置使用路由
const Koa = require('koa')
const Router = require('koa-router')const mockList = require('./mock/index')const app = new Koa()
const router = new Router()// 注册mock路由
mockList.forEach(item => {const {url, method, response} = itemrouter[method](url, async ctx => {const res = response()ctx.body = res})
})app.use(router.routes())
// 应用监听3001端口
app.listen(3001)
第四步:配置启动脚本,启动服务
{"name": "questionnaire-mock","version": "1.0.0","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","dev": "nodemon index.js"},"keywords": [],"author": "","license": "ISC","description": "","dependencies": {"koa": "^2.16.1","koa-router": "^13.0.1","mockjs": "^1.1.0"},"devDependencies": {"nodemon": "^3.1.9"}
}
npm run dev
启动成功,如下图所示:
1.4.3 测试api请求
测试两个接口,如下图所示:

为了更真实模拟网络请求,我给异步请求接口添加请求时间(网络延迟),代码如下所示:
const Koa = require('koa')
const Router = require('koa-router')const mockList = require('./mock/index')const app = new Koa()
const router = new Router()async function getRes(fn) {return new Promise(resolve => {setTimeout(() => {const res = fn()resolve(res)}, 1000);})
}// 注册mock路由
mockList.forEach(item => {const {url, method, response} = itemrouter[method](url, async ctx => {const res = await getRes(response)ctx.body = res})
})app.use(router.routes())
// 应用监听3001端口
app.listen(3001)
1.4.4 模拟post请求,使用postman测试
question.js新增post接口,代码如下所示:
const Mock = require('mockjs')const Random = Mock.Randommodule.exports = [{url: '/api/question/:id',method: 'get',response() {return {errno: 0,data: {id: Random.id(),title: Random.ctitle()}}}},{url: '/api/question',method: 'post',response() {return {errno: 0,data: {id: Random.id()}}}},
]
postman测试改接口,如下图所示:

1.4.5 测试nodejs服务器api
启动questionnaire,查看Home.tsx接口请求:
import { FC, useEffect } from "react";
// import { FC } from "react";
import { useNavigate } from "react-router-dom";
import { Button, Typography } from "antd";
import axios from "axios";
import { MANAGE_INDEX_PATHNAME } from "../router";
import styles from "./Home.module.scss";// import "../_mock/index.ts";const { Title, Paragraph } = Typography;const Home: FC = () => {const nav = useNavigate();useEffect(() => {fetch("/api/test").then((res) => res.json()).then((data) => console.log("fetch data: ", data));// mockjs 只能拦截XMLHttpRequest,不能拦截fetch请求// mockjs 内部使用XMLHttpRequest API // axios.get("/api/test").then((res) => console.log("axios data ", res));}, []);// function clickHandler() {// nav({// pathname: LOGIN_PATHNAME,// search: "a=20",// });// }return (<div className={styles.container}><div className={styles.info}><Title>调查问卷 | 在线投票</Title><Paragraph>已累计创建问卷 100 份,发布问卷 90 份,收到问卷 980 份</Paragraph><Button type="primary" onClick={() => nav(MANAGE_INDEX_PATHNAME)}>开始使用</Button></div></div>);
};export default Home;
fetch接口如下图所示:

axios接口如下图所示:

1.5 mock平台
在线mock平台
- Fast-mock Y-API Swagger
- 可能不稳定、不维护,或者网恋不稳定
- 可能存在敏感数据泄漏的风险
优点不耗费资源,成本低。生产强烈不建议使用在线mock平台,除非是个人测试无所谓。
1.6 小结
- 直接在前端使用mockjs,不推荐
- 使用nodejs+mockjs,推荐
- 使用在线mock平台,不推荐
结语
❓QQ:806797785
⭐️仓库地址:https://gitee.com/gaogzhen
⭐️仓库地址:https://github.com/gaogzhen
[1]mock文档[CP/OL].
[2]koa官网[CP/OL].
相关文章:
0801ajax_mock-网络ajax请求1-react-仿低代码平台项目
0 vite配置proxy代理 vite.config.ts代码如下图所示: import { defineConfig } from "vite"; import react from "vitejs/plugin-react";// https://vite.dev/config/ export default defineConfig({plugins: [react()],server: {proxy: {&qu…...
基于Python智能体API的Word自动化排版系统:从零构建全流程模块化工作流与版本控制研究
基于Python智能体API的Word自动化排版系统:从零构建全流程模块化工作流与版本控制实践研究 1. 引言2. 研究背景与意义3. 自动排版工作流的设计原理3.1 文档内容提取与解析3.2 样式参数与格式化规则3.3 智能体API接口调用3.4 自动生成与批量处理3.5 与生成式AI的协同4. 系统架构…...
Java【网络原理】(4)HTTP协议
目录 1.前言 2.正文 2.1自定义协议 2.2HTTP协议 2.2.1抓包工具 2.2.2请求响应格式 2.2.2.1URL 2.2.2.2urlencode 2.2.3认识方法 2.2.3.1GET与POST 2.2.3.2PUT与DELETE 2.2.4请求头关键属性 3.小结 1.前言 哈喽大家好啊,今天来继续给大家带来Java中网络…...
每天学一个 Linux 命令(27):head
可访问网站查看,视觉品味拉满: http://www.616vip.cn/27/index.html head 是 Linux 中用于查看文件开头部分内容的命令,默认显示文件前 10 行,适合快速预览文件结构或日志头部信息。 命令格式 head [选项] [文件]常用选项 选项说明-n <行数>指定显示前 N 行(如…...
【2025软考高级架构师】——计算机系统基础(7)
摘要 本文主要介绍了计算机系统的组成,包括硬件和软件两大部分。硬件由处理器、存储器、总线、接口和外部设备等组成,软件则涵盖系统软件和应用软件。文章还详细阐述了冯诺依曼计算机的组成结构,包括 CPU、主存储器、外存等,并解…...
自定义 strlen 函数:递归实现字符串长度计算
目录 自定义 strlen 函数:递归实现字符串长度计算 一.引言 二.代码呈现 三.代码结构与功能概述 1.自定义 my_strlen 函数 1.函数参数与功能 2.代码逻辑分析 1.参数有效性检查: 2.递归计算字符串长度: 2.main 函数 1.变量定义 2.函…...
LeetCode 打家劫舍+删除并获得点数
题目描述 打家劫舍题目传送门1 删除并获得点数传送门2 思路 这两道题看似毫无关系,但竟然可以用桶数组联系起来!! 先说打家劫舍这道题 限制条件是不能走相邻的屋,再联想到跳台阶(走一格或两格)&#x…...
图解MCP:Model Context Protocol
🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…...
【网络】数据链路层知识梳理
全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的笔记吧~ 自己写自己的八股!让未来的自己看懂! (全文手敲,受益良多) 数据链路层 我们来重新理解一下这个图:…...
积木报表查询出现jdbc.SQLServerException: 对象名 ‘user_tab_comment 的解决方法
目录 前言1. 问题所示2. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 1. 问题所示 使用帆软报表无错,后续使用积木报表查询出错: 没有显示报表: 具体错误信息如下:...
数字孪生废气处理工艺流程
图扑数字孪生废气处理工艺流程系统。通过精准 3D 建模,对废气收集、预处理、净化、排放等全流程进行 1:1 数字化复刻,实时呈现设备运行参数、污染物浓度变化等关键数据。 借助图扑可视化界面,管理者可直观掌握废气处理各环节状态,…...
【某比特币网址请求头部sign签名】RSA加密逆向分析
目标:aHR0cDovL21lZ2FiaXQudmlwL21hcmtldA 直接搜索sign不方便定位,可以换个思路搜asi_uuid或者user_info 为什么搜这个,因为都是请求头里面的参数,基本上会在一起 实际上就是Object(h.a)((new Date).getTime()) 直接在这里打断点…...
基于WebRTC技术的EasyRTC:支持任意平台设备的实时音视频通信解决方案
一、技术架构与核心优势 EasyRTC是一套基于WebRTC技术的实时音视频通信框架,旨在为开发者提供高效、稳定、跨平台的通信解决方案。其核心优势在于支持任意平台设备,包括Web端、移动端、桌面端和嵌入式设备,真正实现“一次开发,多…...
DNS解析失败怎么解决?
在互联网时代,畅快地浏览网页、使用各类网络服务已成为生活常态。然而,当屏幕突然弹出 “DNS解析失败”的提示,原本顺畅的网络连接戛然而止,让人倍感困扰。DNS即域名系统,它如同互联网的 “电话簿”,负责将…...
2025年4月19日
1.英语 1.单词 2.翻译 老年人食堂 In recent years, elderly population in China has continued to grow. The Chinese government is taking various measures to advance the construction of the elderly care service system and to make the later lives of the elde…...
FastGPT安装前,系统环境准备工作?
1.启用适用于 Linux 的 Windows 子系统 方法一:打开控制面板 -> 程序 -> 启用或关闭Windows功能->勾选 “适用于Linux的Vindows子系统” 方法二:以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“…...
从零起步的Kaggle竞赛 - BirdCLEF2025
一个优秀的coder,先从CV工程开始...... 首先复制了 LB 0.804- EfficientNet B0 Pytorch Pipeline | Kaggle 这个notebook并尝试提交(Kaggle的notebook中包括参赛者训练好的模型,所以本次提交只能熟悉一下流程而已),ok…...
【Vue】组件通信(Props/Emit、EventBus、Provide/Inject)
个人主页:Guiat 归属专栏:Vue 文章目录 1. Props/Emit 父子组件通信1.1 Props 向下传递数据1.2 Emit 向上传递事件 2. EventBus 跨组件通信2.1 创建事件总线2.2 使用事件总线2.3 EventBus 优缺点 3. Provide/Inject 深层组件通信3.1 基本使用3.2 响应式处…...
electron打包是没有正确生成electron.exe,x ENOENT: no such file or directory, rename:
情况一 arch配置错误,最好根据自己的电脑架构配置 win: {target: [{target: "nsis", arch: ["x64"],},],artifactName: "${productName}_${version}.${ext}",}, 情况二、 electron没有被正确下载,可以翻墙重新通过npm…...
立体匹配模型RAFT-Stereo的onnx导出与trt使用指南
这里写目录标题 如何将 RAFT-Stereo 模型导出为 ONNX 格式转化为静态的模型:转化为动态的模型:reference通过将 RAFT-Stereo 模型转换为 ONNX 格式,我们能够在不同的推理引擎和硬件平台上高效地部署和运行该模型,而无需依赖原始的 PyTorch 环境。这为在实际应用中使用 RAFT…...
C++数组栈与链表栈
数组栈 #include <iostream> using namespace std; class mystack{ private:int dat[1000];int curr0; public:void push(int);void pop();int top();bool empyt();int size(); }; void mystack::push(int b){if(curr<1000){dat[curr]b;curr;} } void mystack::pop()…...
QT实现串口透传的功能
在一些产品的开发的时候,需要将一个串口的数据发送给另外一个串口进行转发。 具体的代码如下: #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::Ma…...
动态规划入门:背包问题求具体方案(以0-1背包问题为例)
本质:有向图最短(长)路问题 字典序最小方案?--贪心思路?(本题未使用) 分析第一个物品: 写代码时tip:要考虑“边读边做”还是“先读后做” #include<iostream> #i…...
WEMOS LOLIN32 开发板引脚布局和技术规格
🔗 快速链接ESP32 Development Boards, Sensors, Tools, Projects and More https://megma.ma/wp-content/uploads/2021/08/Wemos-ESP32-Lolin32-Board-BOOK-ENGLISH.pdf WEMOS LOLIN32 Development Board Details, Pinout, Specs WEMOS LOLIN32 Development Board …...
mysql中的group by用法详解
MySQL中的GROUP BY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算。以下从基本语法到高级用法进行详细解析: 一、基本语法与核心功能 SELECT 分组列, 聚合函数(计算列) FROM 表名 [WHERE 条件] GROUP B…...
java基础从入门到上手(九):Java - List、Set、Map
一、List集合 List 是一种用于存储有序元素的集合接口,它是 java.util 包中的一部分,并且继承自 Collection 接口。List 接口提供了多种方法,用于按索引操作元素,允许元素重复,并且保持插入顺序。常用的 List 实现类包…...
从malloc到free:动态内存管理全解析
1.为什么要有动态内存管理 我们已经掌握的内存开辟方法有: int main() {int val 20;//在栈空间上开辟四个字节char arr[20] { 0 };//在栈空间上开辟10个字节的连续空间return 0; }上述开辟的内存空间有两个特点: 1.空间开辟的时候大小已经固定 2.数组…...
AutoSAR从概念到实践系列之MCAL篇(二)——Mcu模块配置及代码详解(上)
欢迎大家学习我的《AutoSAR从概念到实践系列之MCAL篇》系列课程,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢各位的支持! 根据上一篇内容中…...
ubuntu22.04安装dukto
1.添加源 sudo add-apt-repository ppa:xuzhen666/dukto2.进行更新和安装 sudo apt update sudo apt install dukto3.报错 $ sudo apt install dukto 正在读取软件包列表... 完成 正在分析软件包的依赖关系树... 完成 正在读取状态信息... 完成 您也许需要…...
【数据库】事务
目录 1. 什么是事务? 2. 事务的ACID特性 3. 为什么使用事务? 4. 如何使用事务 4.1 查看支持事务的存储引擎 4.2 语法 4.3 保存点 4.4 自动/手动提交事务 5. 事物的隔离性和隔离级别 5.1 什么是隔离性 5.2 隔离级别 5.3 查看和设置隔离级别 1…...
