Vite中自制mock服务器(不使用第三方服务)

作者:陈楠112 时间:2024-04-28 09:27:14 

为什么要 mock

  • 后台接口还没完成,但前端要用到接口

  • 我想篡改后台接口的结果,测试一些分支逻辑

起步

本篇文章会使用到 swraxiosvite-plugin-mock,请自行安装

配置 vite进入 vite.config.ts,添加以下代码

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { viteMockServe } from 'vite-plugin-mock'

export default defineConfig(({ command }) => ({
 plugins: [
   react(),
   viteMockServe()
 ],
}))

创建 mock 数据

  • 创建 mock/test.ts 文件

mkdir mock/ && touch mock/test.ts
  • 添加 mock 数据

import { MockMethod } from 'vite-plugin-mock'
export default [
 {
   url: '/api/v1/me',
   method: 'get',
   response: () => {
     return {
       id: 1,
       name: 'Niki'
     }
   }
 }
] as MockMethod[]

使用 useSWR

在使用到的组件中用:

import useSWR from 'swr'
import axios from 'axios'

export const Home: React.FC = () => {
 const { data, error, isLoading } = useSWR('/api/v1/me', path => {
   return axios.get(path)
 })

if (isLoading) {
   return <div>加载中...</div>
 }
 if (error) {
   return <div>加载失败</div>
 }

return (
   <div>Hi, I am {data.name}!</div>
 )
}

判断是否在开发环境

vite.config.ts 里添加

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { viteMockServe } from 'vite-plugin-mock'

// https://vitejs.dev/config/
export default defineConfig(({ command }) => ({
+ define: {
+   isDev: command === 'serve' // 它会写在 window.isDev = true / false
+ },
 plugins: [
   react(),
   viteMockServe()
 ],
}))

封装请求

这里只是简单的封装一下 Axios

mkdir src/lib/ touch src/lib/ajax.tsx
import axios from 'axios'

axios.defaults.baseURL = isDev ? '/' : 'xxx' // 'xxx' 改为线上的 ip:端口
axios.defaults.headers.post['Content-Type'] = 'application/json'
axios.defaults.timeout = 10000

export const ajax = {
 get: (path: `/${string}`) => {
   return axios.get(path)
 }
}

最终使用

import useSWR from 'swr'
import { ajax } from '../lib/ajax'

export const Home: React.FC = () => {
 const { data, error, isLoading } = useSWR('/api/v1/me', path => {
   return ajax.get(path)
 })

if (isLoading) {
   return <div>加载中...</div>
 }
 if (error) {
   return <div>加载失败</div>
 }

return (
   <div>Hi, I am {data.name}!</div>
 )
}

来源:https://juejin.cn/post/7222237243527233573

标签:Vite,mock服务器
0
投稿

猜你喜欢

  • 详解Python函数作用域的LEGB顺序

    2021-05-06 15:00:10
  • python爬虫实现POST request payload形式的请求

    2023-11-07 21:08:55
  • mybatis如何实现的数据库排序

    2024-01-24 16:35:32
  • PHP实现定时生成HTML网站首页实例代码

    2023-06-12 05:39:40
  • MySQL数据库表被锁、解锁以及删除事务详解

    2024-01-24 14:17:51
  • 经典SQL语句大全

    2009-08-26 16:44:00
  • Python错误的处理方法

    2021-08-01 05:38:15
  • python 如何实现跳过异常继续执行

    2022-07-03 11:34:02
  • Python实现自动化处理PDF文件的方法详解

    2024-01-02 07:02:21
  • pyhon如何把程序打包为whl

    2023-06-16 11:30:48
  • jupyter 使用Pillow包显示图像时inline显示方式

    2021-09-08 00:42:02
  • 如何用python批量调整视频声音

    2023-10-14 06:51:57
  • SQL触发器定义与使用

    2024-01-28 09:21:27
  • 一个css垂直水平居中布局,css效果

    2008-11-03 11:40:00
  • python 通过麦克风录音 生成wav文件的方法

    2023-03-21 05:27:50
  • 用asp实现的获取文件夹中文件的个数的代码

    2011-03-08 11:02:00
  • python数据结构leetcode338比特位计数算法

    2023-05-06 21:24:33
  • 跟老齐学Python之啰嗦的除法

    2022-12-18 12:47:38
  • Python开发时报TypeError: ‘int‘ object is not iterable错误的解决方式

    2023-08-23 20:30:05
  • javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)

    2024-04-22 12:49:59
  • asp之家 网络编程 m.aspxhome.com