在 Vue3 开发中模拟数据

在 Vue3 开发中,模拟数据是常见的需求(尤其在前后端分离开发时)。以下是几种常用方法及具体实现:


一、本地静态数据

直接在组件或独立文件中定义静态数据,适用于简单场景。

<script setup>
import { ref } from 'vue';

const mockUsers = ref([
  { id: 1, name: 'Alice', age: 28 },
  { id: 2, name: 'Bob', age: 32 }
]);
</script>

<template>
  <div v-for="user in mockUsers" :key="user.id">
    {{ user.name }} - {{ user.age }}
  </div>
</template>

二、使用 JSON 文件

  1. 创建 src/mock/data.json
{
  "users": [
    { "id": 1, "name": "Charlie", "role": "admin" },
    { "id": 2, "name": "Diana", "role": "user" }
  ]
}
  1. 在组件中引入:
<script setup>
import mockData from '@/mock/data.json';

console.log(mockData.users); // 输出模拟数据
</script>

三、使用 Mock.js(动态生成数据)

  1. 安装 Mock.js:
npm install mockjs --save-dev
  1. 创建 src/mock/user.js
import Mock from 'mockjs';

Mock.mock('/api/users', 'get', {
  'list|5-10': [{
    'id|+1': 1,
    'name': '@cname',
    'email': '@email',
    'avatar': Mock.Random.image('100x100')
  }]
});
  1. 在入口文件启用 Mock:
// main.js
import { createApp } from 'vue';
import App from './App.vue';

if (import.meta.env.DEV) {
  import('./mock/user'); // 仅在开发环境启用
}

createApp(App).mount('#app');

四、Vite 插件(vite-plugin-mock)

  1. 安装插件:
npm install vite-plugin-mock cross-env -D
  1. 配置 vite.config.js
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import { viteMockServe } from 'vite-plugin-mock';

export default defineConfig({
  plugins: [
    vue(),
    viteMockServe({
      mockPath: 'src/mock', // Mock 文件存放目录
      localEnabled: true,  // 开发环境启用
      prodEnabled: false,  // 生产环境禁用
    })
  ]
});
  1. 创建 src/mock/user.ts
import { MockMethod } from 'vite-plugin-mock';

export default [
  {
    url: '/api/login',
    method: 'post',
    response: ({ body }) => {
      if (body.username === 'admin') {
        return {
          code: 200,
          data: { token: 'mock_token' }
        };
      }
      return { code: 401, message: 'Invalid credentials' };
    }
  }
] as MockMethod[];

五、Axios 拦截器(临时模拟请求)

// src/utils/request.js
import axios from 'axios';

const instance = axios.create();

// 开发环境拦截请求
if (import.meta.env.DEV) {
  instance.interceptors.request.use(config => {
    if (config.url === '/api/posts') {
      return Promise.resolve({
        data: [
          { id: 1, title: 'Mock Post 1' },
          { id: 2, title: 'Mock Post 2' }
        ]
      });
    }
    return config;
  });
}

export default instance;

六、进阶方案:Express 本地服务器

  1. 创建 mock-server.js
const express = require('express');
const app = express();

app.get('/api/products', (req, res) => {
  res.json([
    { id: 1, name: 'Product A', price: 99.99 },
    { id: 2, name: 'Product B', price: 149.99 }
  ]);
});

app.listen(3001, () => {
  console.log('Mock server running on http://localhost:3001');
});
  1. 启动服务器:
node mock-server.js
  1. 在 Vue 组件中调用:
axios.get('http://localhost:3001/api/products')
  .then(response => console.log(response.data));

选择建议:

  • 快速原型:使用组件内静态数据或 JSON 文件
  • 动态数据需求:Mock.js + 随机数据生成
  • 完整 API 模拟vite-plugin-mock 或 Express 服务器
  • 请求拦截调试:Axios 拦截器临时方案

注意:生产环境务必移除 Mock 逻辑,可通过环境变量判断:

if (import.meta.env.MODE === 'development') {
  // 启用 Mock
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁若华尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值