在 Vue 3 项目中使用 Mock 数据

方案:vite-plugin-mock(Vite 项目首选)

这是目前最推荐的方式,因为它能直接启动 Mock 服务器,无需启动后端,且支持热更新。

方便生成mock数据结构的网站

mock使用相关网站

1. 安装依赖

bash 复制代码
npm install vite-plugin-mock mockjs -D

2. 配置 vite.config.ts

bash 复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { viteMockServe } from 'vite-plugin-mock'

export default defineConfig({
  plugins: [
    vue(),
    viteMockServe({
      mockPath: 'mock',          // 存放 mock 文件的目录
      enable: true,              // 是否开启 mock(生产环境建议 false)
    }),
  ],
})

第 3 步:创建 Mock 文件

在项目根目录下创建 mock 文件夹,然后在里面创建你的第一个 mock 文件。

创建 mock/user.js

bash 复制代码
// mock/user.js

export default [
  {
    url: '/api/login',          // 拦截的接口地址
    method: 'post',             // 请求方法:get/post/put/delete
    response: ({ body }) => {
      // body 是前端传来的请求参数
      const { username, password } = JSON.parse(body)
      
      // 可以在这里做简单的逻辑判断
      if (username === 'admin' && password === '123456') {
        return {
          code: 200,
          message: '登录成功',
          data: {
            token: 'mock-token-' + Date.now(),
            userName: '管理员',
            roles: ['admin']
          }
        }
      } else {
        return {
          code: 401,
          message: '用户名或密码错误',
          data: null
        }
      }
    }
  },
  {
    url: '/api/user/list',
    method: 'get',
    response: ({ query }) => {
      // query 是 GET 请求的参数
      console.log('查询参数:', query)
      
      return {
        code: 200,
        message: 'success',
        data: {
          total: 2,
          list: [
            { id: 1, name: '张三', age: 25, email: 'zhangsan@test.com' },
            { id: 2, name: '李四', age: 30, email: 'lisi@test.com' }
          ]
        }
      }
    }
  }
]

第 4 步:在 Vue 组件中使用

bash 复制代码
<template>
  <div>
    <h1>Vue3 + Mock 测试</h1>
    <button @click="handleLogin">登录</button>
    <button @click="handleGetList">获取用户列表</button>
    <div v-if="userInfo">
      <p>用户名:{{ userInfo.userName }}</p>
      <p>Token:{{ userInfo.token }}</p>
    </div>
    <div v-if="userList.length">
      <h3>用户列表:</h3>
      <ul>
        <li v-for="item in userList" :key="item.id">
          {{ item.name }} - {{ item.age }}岁 - {{ item.email }}
        </li>
      </ul>
    </div>
  </div>
</template>

<script>
import axios from 'axios'
import { ref } from 'vue'

export default {
  name: 'App',
  setup() {
    const userInfo = ref(null)
    const userList = ref([])

    // 登录请求
    const handleLogin = async () => {
      try {
        const res = await axios.post('/api/login', {
          username: 'admin',
          password: '123456'
        })
        console.log('登录响应:', res.data)
        if (res.data.code === 200) {
          userInfo.value = res.data.data
          alert('登录成功!')
        } else {
          alert(res.data.message)
        }
      } catch (error) {
        console.error('请求失败:', error)
      }
    }

    // 获取用户列表
    const handleGetList = async () => {
      try {
        const res = await axios.get('/api/user/list', {
          params: {
            page: 1,
            pageSize: 10
          }
        })
        console.log('列表响应:', res.data)
        if (res.data.code === 200) {
          userList.value = res.data.data.list
        }
      } catch (error) {
        console.error('请求失败:', error)
      }
    }

    return {
      userInfo,
      userList,
      handleLogin,
      handleGetList
    }
  }
}
</script>

请求返回 404

原因:mock 文件路径或接口地址不匹配, 留意Mock文件夹创建位置,和地址正常,或是本地有设置代理,需要修改开发环境的基本路径

相关推荐
zhanghaha13143 分钟前
HTML系列教程:14_HTML 表单与输入框 <form>、<input> 零基础详解
java·前端·javascript
IMPYLH5 分钟前
HTML 的 <samp> 元素
前端·网络·html
IMPYLH7 分钟前
HTML 的 <script> 元素
前端·html
weixin_493503675 小时前
Vue3 前端生成 PDF:会员证书与活动签到表的三种打印方案与踩坑记录
前端·pdf·状态模式
尾善爱看海8 小时前
前端算法与手写题集
前端·算法
徐小夕8 小时前
JitWord 4.0 万字分享:从协同工具到AI Word操作系统,聊聊3年产品创业史
前端·vue.js·后端
萧鼎10 小时前
Python 高性能Web框架神器 FastAPI:自动生成API文、基于Pydant、异步请求处理全搞定
前端·python·fastapi
IT_陈寒10 小时前
Redis误用keys命令把生产环境搞崩了,血的教训
前端·人工智能·后端
计算机魔术师11 小时前
5000亿估值冲刺科创板,DeepSeek 为何急着上市?
前端
我血条子呢11 小时前
前端解析word方案
前端·word