05.整合Axios+MockJs

news2024/9/30 15:20:06

1. 前言

作为前后端分离的项目,必不可少的当然是发请求向后端拿数据了, 但是不可能每次等到接口完成我们才开始开发前端,所以使用 mock.js 先模拟后端接口,等后端接口开发完成后,可以无缝衔接,直接替换为真正的后端服务。
可以简单了解一下就行,因为我们这个项目是全栈开发,所以不会有这种情况,反正都得自己写,没必要整这么麻烦。

2. 引入 Aioxs

Axios 是一个基于 promise 的网络请求库,进一步了解参考官方文档:axios-http.com/zh/

2.1. 安装依赖

npm install axios

2.2. 封装请求工具类

新建目录 src/utils,新建文件 request.ts

import axios from 'axios'

const instance = axios.create({
  baseURL: '/api',
  timeout: 5000
})
// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    // 请求成功做点什么
    return config
  },
  function (error) {
    // 对请求错误做点什么
    return Promise.reject(error)
  }
)
// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 对响应成功做点什么
    return response
  },
  function (error) {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

export default instance

3. 整合 Mock.js + vite-plugin-mock

Mock.js 生成随机数据,拦截 Ajax 请求。进一步了解参考官方文档:mockjs.com/
vite-plugin-mock 这是一个插件,更方便的编写 mock接口, 文档地址:https://github.com/vbenjs/vite-plugin-mock/blob/main/README.zh_CN.md

3.1. 安装依赖

npm i  mockjs vite-plugin-mock -D

3.2. vite.config.ts 配置

// vite.config.ts
import { viteMockServe } from 'vite-plugin-mock' // [!code ++]

export default defineConfig({
  plugins: [
    vue(),
    // 添加 vite-plugin-mock 插件
    viteMockServe({ // [!code ++]
      // mock 数据文件所在的目录 // [!code ++]
      mockPath: './src/mock', // [!code ++]
      enable: true, // [!code ++]
      logger: true // [!code ++]
    }), // [!code ++]
  ]
})

3.3. 定义接口

新建文件夹 src/api,新建文件 user.ts

类型定义

这里用的是 ts 所以对于类型要求比较严格,所以要定义好我们生成数据的类型 新建 src/types 文件夹,data.d.ts 中我定义了统一的一些类型,user.d.ts 则是用户相关的类型

// data.d.ts 统一返回类型
export interface ApiRes<T> {
  success: boolean
  code: number
  data?: T
  message: string
}
// user.d.ts
// 用户信息
export interface UserInfo {
  id?: string
  username?: string
  avatar?: string
}

API接口定义

// api/user/index.ts
import type { UserInfo } from '@/types/user'

import request from '@/utils/request'
// 获取当前用户信息
export const getUserInfo = () => {
  return request<UserInfo>({
    method: 'GET',
    url: '/user'
  })
}

3.4. 新建 src/mock 目录,新建 user.ts

import type { UserInfo } from '@/types/user'

export default [
  // 用户登录
  {
    url: '/api/user',
    method: 'GET',
    response: () => {
      return {
        code: 20000,
        success: true,
        message: '请求成功。',
        data: <UserInfo>{
          id: '1',
          username: 'admin',
          avatar: ''
        }
      }
    }
  }
]

3.5. 测试

  • App.vue 页面 加个 button 添加点击登录事件
<script>
import { getUserInfo } from '@/api/user'

const getInfo = async () => {
  const res = await getUserInfo()
  console.log(res)
}
</script>
<template>
	<el-button type="primary" size="default" class="bg-green-500" @click="getInfo">获取用户信息</el-button>
</template>
  • 启动项目,点击测试
    在这里插入图片描述

可以看到,如我们所预期的那样拿到了结果。那么后面想要什么数据自己定义好接口返回就行了。

4. 一点点优化

我们想要拿到具体返回的内容,输入 res.data. 的时候由于 ts 类型检测给了我们提示,如果打印 res.data.id ,出来会是 undefined,因为从打印的 res 结果可以知道,其实我们要拿的数据应该在,res.data.data 里。

在这里插入图片描述

在这里插入图片描述

我们改成 res.data.data.id,成功取到值了,但是这个时候会发现 vscode 爆红了,提示找不到类型
在这里插入图片描述

这里主要是因为,我们导出 axios 对象的时候,没有确定好类型,vscode 检测异常了, 而且在请求接口过程中,其实对于我们有用的信息就是最终的 data 对象,所以这里在封装的 request.ts 中,我们进行统一处理。

4.1. 在响应拦截器中进行解构,返回 data 对象

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 对响应成功做点什么
    const { success, message, data } = response.data
    if (success) {
      return data
    } else {
      // 请求失败,业务失败,消息提示
      return Promise.reject(new Error(message))
    }
  },
  function (error) {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

4.2. 在导出 axios 对象的时候进行类型指定

// 指定返回数据类型,类型推断提示
export default async <T = any>(config: AxiosRequestConfig) => {
  const response: T = await instance(config)
  return response
}

这个时候再去刚才测试的地方发现直接通过返回对象就可以有提示信息,并且可成功拿到返回结果。 如果发现没有提示或者爆红,重启一下 vscode

在这里插入图片描述

5. 环境切分

5.1. 创建 .env.development,注意这里的变量名必须以 VITE_ 开头

# 标志
ENV = 'development'

# base api
VITE_APP_BASE_API = '/mock'

5.2. 为我们自定义的变量添加类型扩展

// env.d.ts
// 扩展环境变量
interface ImportMetaEnv {
    readonly VITE_APP_BASE_API: string
    // 更多环境变量...
  }
  
  interface ImportMeta {
    readonly env: ImportMetaEnv
 }

修改 request.ts中的 baseURL,这时可以看到有提示。
在这里插入图片描述

修改 mock.ts 中定义的接口,将前缀改成 /mock

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2087650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EmguCV学习笔记 VB.Net 7.2 特征点检测

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

(24)(24.6) 基于OSD的参数菜单

文章目录 前言 1 Copter默认屏幕 2 Plane默认屏幕 3 实例 前言 这允许使用 ArduPilot 机载 OSD 和 RC 发射机的杆输入设置和调整参数。还有两个额外的 OSD 屏幕可用&#xff08;OSD5 和 OSD6&#xff09;&#xff0c;每个屏幕有 9 个“插槽”来保存参数。屏幕首先显示一组…

taro ui 小程序at-calendar日历组件自定义样式+选择范围日历崩溃处理

taro ui 日历文档 目录 单选标记时间&#xff1a; 效果&#xff1a; template&#xff1a; data&#xff1a; methods: 日历--范围选择&#xff1a; 效果&#xff1a; template&#xff1a; data&#xff1a; methods&#xff1a; 日历--间隔多选&#xff1a;利用标…

详细分析python中QRCode生成二维码的基本知识(附Demo)

目录 前言1. 基本知识2. Demo3. 彩蛋3.1 文件路径3.2 Image.LANCZOS 前言 以下主要利用python中的QRCode来生成二维码的基本知识 1. 基本知识 简单易用&#xff0c;并且可以生成高质量的二维码图像 支持多种自定义设置&#xff0c;例如二维码的大小、边框、容错级别、颜色等…

java在项目中实现excel导入导出

一、初识EasyExcel* 1. Apache POI 先说POI&#xff0c;有过报表导入导出经验的同学&#xff0c;应该听过或者使用。 Apache POI是Apache软件基金会的开源函式库&#xff0c;提供跨平台的Java API实现Microsoft Office格式档案读写。但是存在如下一些问题&#xff1a; 1.1 …

C语言阴阳迷宫

目录 开头程序程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h> enum WASD {W…

【传输层协议】TCP协议(上) {TCP协议段格式;确认应答机制;超时重传机制;连接管理机制:三次握手、四次挥手}

TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层协议&#xff0c;用于在网络上可靠地传输数据。TCP是互联网协议套件&#xff08;TCP/IP&#xff09;中的一个主要协议&#xff0c;它在IP&#xff08;Internet Protocol…

基于STM32开发的智能恒温系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化温度检测与恒温控制OLED显示与状态提示Wi-Fi通信与远程监控应用场景 家庭环境的智能恒温管理实验室或工业环境的精确温度控制常见问题及解决方案 常见问题解决方案结论 1. 引言 智…

VIVADO自定义 IP封装

简介 本章节主要针对VIVAO 2020.2版本做IP自定义封装&#xff0c;其中涉及到IP寄存器读写配置&#xff0c;自定义接口封装等介绍。 IP封装 IP标准自定义步骤一般有创建工程&#xff0c;封装IP&#xff0c;自定义内容&#xff0c;添加自定义库这4个步骤&#xff0c;下面…

探秘紫白洋桔梗花语:勇气、爱情、希望与清晰的象征解读

在缤纷多彩的花卉世界中&#xff0c;紫白洋桔梗宛如一位神秘而优雅的仙子&#xff0c;悄然绽放着独特的魅力。它那淡雅的色彩与别致的花形&#xff0c;令人一见倾心&#xff0c;而其背后蕴含的丰富花语&#xff0c;更是如同隐藏的宝藏一般&#xff0c;等待着我们去细细探寻与解…

蓝花楹花语探秘:从宁静忧郁到等待爱情的深刻寓意

在时光的长河中&#xff0c;有一种花朵宛如梦幻的精灵&#xff0c;每当它绽放之时&#xff0c;那一片绚烂的蓝紫色便如同璀璨的星空倾洒人间&#xff0c;它就是蓝花楹。蓝花楹那独特的身姿和醉人的色彩&#xff0c;仿佛自带一种神秘的魔力&#xff0c;吸引着无数人驻足凝望。而…

vue3+ts+vite+electron+electron-store+electron-builder打包可安装包

yarn create vite yarn add electron yarn add electron-store yarn add electron-builder 新增main.js、preload.js // main.js const { app, BrowserWindow, ipcMain, globalShortcut } require(electron) const path require(path) let store // 我们将在稍后动态导入 el…

Flink优化之--旁路缓存和异步IO

Apache Flink 是一个开源流处理框架&#xff0c;以其高吞吐量、低延迟和事件驱动的处理能力著称。随着大数据和实时处理需求的不断增加&#xff0c;Flink 在许多行业和应用场景中得到了广泛应用&#xff0c;如金融风控、物联网数据处理、实时数据分析等。然而&#xff0c;随着数…

如何学习Linux性能优化?

你是否也曾跟我一样&#xff0c;看了很多书、学了很多Linux性能工具&#xff0c;但在面对Linux性能问题时&#xff0c;还是束手无策&#xff1f;实际上&#xff0c;性能分析和优化始终是大多数软件工程师的一个痛点。但是&#xff0c;面对难题&#xff0c;我们真的就无解了吗&a…

2.11键盘事件

目录 实验原理 实验代码 实验结果 实验原理 简单、常用的键盘事件是等待按键事件&#xff0c;它由 waitKey 函数来实现。无论是刚开始学习 OpenCV&#xff0c;还是使用 OpenCV 进行开发调试&#xff0c;都可以看到waitKey 函数的身影&#xff0c;然而基础的东西往往容易忽略…

[Java]MyBatis轻松拿下

介绍 在业务开发过程中, 都是使用java程序完成数据库的操作, 目前最主流的技术就是MyBatis MyBatis是一款优秀的 持久层 框架&#xff0c;用于简化JDBC的开发。 官网: https://mybatis.org/mybatis-3/zh/index.htmlmybatis是Apache的一个开源项目iBatis, 2010年迁移到了googl…

Day00_场景题

文章目录 资料项目经历技能清单自我介绍QPS和TPS?如何设计一个排行榜的功能?如何解决大文件上传问题延时任务处理场景如何设计一个秒杀系统?分布式幂等性如何设计?如果你的系统的QPS 突然提升10倍你会怎么设计?如何从零搭建 10 万级QPS 大流量、高并发优惠券系统?高 QPS,…

OpenCV绘图函数(9)填充多边形函数fillPoly()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 填充一个或多个多边形轮廓所包围的区域。 函数 cv::fillPoly 填充由若干个多边形轮廓所包围的区域。该函数可以填充复杂的区域&#xff0c;例如带…

【大模型】GPT系列模型基础

前言&#xff1a;GPT整体上与transformer结构相似&#xff0c;但只用了decoder部分。 目录 1. GPT2. GPT23. GPT34. 知识补充4.1 下游任务实现方式4.2 sparse attention 1. GPT 预训练&#xff1a;无监督&#xff0c;根据前k个词预测下一个词的概率。微调&#xff1a; 有监督&a…

AI嵌入式人工智能开发 --- 【1】初始RKNPU

目录 一、NPU的由来 二、RKNPU介绍 三、RKNPU单核框架 3.1 AHB/AXI 接口 3.2 卷积神经网络加速单元&#xff08;CNA&#xff09; 3.3 数据处理单元&#xff08;Data Processing Unit&#xff0c;DPU&#xff09; 3.4 平面处理单元&#xff08;Planar Processing Unit&a…