在 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文件夹创建位置,和地址正常,或是本地有设置代理,需要修改开发环境的基本路径

相关推荐
Elcker1 小时前
YnuoAgent(依诺):一个 npm 包,跑起属于自己的 AI 研发平台
前端·人工智能·npm
酷炫码神1 小时前
Day 8|Vue3 响应式:告别手动操作 DOM,让数据驱动界面
javascript·vue.js·ecmascript
计算机魔术师2 小时前
发现2天,修复2个月:AI挖穿PHP后,卡兹克讲透攻防时间差
前端
风骏时光牛马2 小时前
测试标题001
前端
IT_陈寒2 小时前
Java性能优化完全指南
前端·人工智能·后端
电子IT笔记2 小时前
对接群晖NAS,上传和删除踩坑记录
前端·后端
计算机魔术师2 小时前
半年前说不缺钱,半年后150亿美元超募
前端
用户5708462574402 小时前
自动化发布器里最贵的 Bug:返回成功,但什么都没发生
前端
爱吃馒头不吃辣2 小时前
加一道题,改一天代码:题库即数据的降维打击
前端·架构
aiks_yuan3 小时前
Requestly规则使用技巧:前端联调、接口Mock与网络请求调试实战
前端