vite+vue-ts 如何在项目中使用mock模拟接口请求

前端开发过程中时常遇到,页面已经写好了,但是后端还没接口的情况。 后端写好了接口项目又着急着测试上线,这时项目进程压力将会给到前端,加班将是必然。 该方案可以很好的处理这个问题。

前提:

  1. 后端规定好接口返回格式如:
ts 复制代码
interface ApiResponse<T = any> {
  code: number
  message: string
  data: T
  success: boolean
  timestamp?: number
}
  1. 拿到后端数据库字段命名规范,统一规范命名变量
  • 列表的命名:list,data,...
  • 数量的统计:count,total,all,...
  • 页数:page,pageNum,...
  • 条数:size,PageSize,limit,...
  • ...
  1. 明确增删改查的请求方式,GET POST PUT DEL

相关依赖

插件:vite-plugin-mock-dev-server.netlify.app/zh/

安装依赖 pnpm add -D vite-plugin-mock-dev-server

具体操作

配置vite.config.ts

ts 复制代码
import { defineConfig } from 'vite' 
import { mockDevServerPlugin } from 'vite-plugin-mock-dev-server' 

export default defineConfig({
  plugins: [
   ...
    mockDevServerPlugin(), 
  ],
  define: {},
  server: {
    cors: false,
    // 在 proxy 中配置的 代理前缀, mock-dev-server 才会拦截并mock
    proxy: {
      '^/api': {
        target: '',
      },
    },
  },
})

在根目录下创建文件

目录接口 复制代码
mock/
├── user/
│   ├── login.ts
│   ├── register.ts

编辑login.ts文件(只有两个账号:admin/Admin123 或 demo/Demo123 通过登录)

ts 复制代码
import { defineMock } from 'vite-plugin-mock-dev-server'
const data =  {
        code: 0,
        message: '登录成功',
        success: true,
        timestamp: Date.now(),
        data: {
          token: 'test',
          expire: Date.now() + 1000 * 60 * 60 * 24,
          userinfo: {
            name: 'test',
            avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
          },
          permission: [
            {
              pathId: "/",
              name: "首页",
              add: true,
              edit: true,
              del: true,
              list: true,
              auth: true,
            }, 
            {
              pathId: "/system/user",
              name: "用户管理",
              add: true,
              edit: true,
              del: true,
              list: true,
              auth: true,
            }, 
          ],
        }
      }

export default defineMock({
  url: '/api/login',
  method: 'POST',
  body({ body }) {
    const { username, password} = body
    if (username === 'admin' && password === 'Admin123') {
      return data
    }
    if (username === 'demo' || password === 'Demo123') {
     return data
    }
    return {
      code: 1,
      message: '登录失败',
      success: false,
      timestamp: Date.now(),
    }
  }
})

请求案例:

js 复制代码
fetch('/api/login', {
      method: 'POST',
      body: JSON.stringify({
        username: 'admin',
        password: 'Admin123',
      }),
    }).then((res:any) => {
      if (response.code !== 0) {
        ElMessage.error(res.message)
        return
      }
       ElNotification({
      title: '登录成功',
      message: `欢迎回来,${response.data.userinfo.username}!`,
      type: 'success',
      duration: 3000
    })
    router.push('/')
})
相关推荐
编程猪猪侠25 分钟前
Tailwind CSS 自定义工具类与主题配置指南
前端·css
qhd吴飞29 分钟前
mybatis 差异更新法
java·前端·mybatis
YGY Webgis糕手之路1 小时前
OpenLayers 快速入门(九)Extent 介绍
前端·经验分享·笔记·vue·web
患得患失9491 小时前
【前端】【vueDevTools】使用 vueDevTools 插件并修改默认打开编辑器
前端·编辑器
ReturnTrue8681 小时前
Vue路由状态持久化方案,优雅实现记住表单历史搜索记录!
前端·vue.js
UncleKyrie1 小时前
一个浏览器插件帮你查看Figma设计稿代码图片和转码
前端
遂心_1 小时前
深入解析前后端分离中的 /api 设计:从路由到代理的完整指南
前端·javascript·api
你听得到111 小时前
Flutter - 手搓一个日历组件,集成单日选择、日期范围选择、国际化、农历和节气显示
前端·flutter·架构
风清云淡_A1 小时前
【REACT18.x】CRA+TS+ANTD5.X封装自定义的hooks复用业务功能
前端·react.js
@大迁世界1 小时前
第7章 React性能优化核心
前端·javascript·react.js·性能优化·前端框架