Bootstrap

Vue项目中使用Mock.js进行API模拟

Vue项目中使用Mock.js进行API模拟

🌟 前言

欢迎来到我的小天地,这里是我记录技术点滴、分享学习心得的地方。📚

🛠️ 技能清单
  • 编程语言:Java、C、C++、Python、Go、
  • 前端技术:Jquery、Vue.js、React、uni-app、Echarts
  • UI设计: Element-ui、Antd、Color-ui
  • 后端技术:Spring Boot、Mybatis-plus、Swagger
  • 移动开发:Android
  • 操作系统:Windows、Linux
  • 开发框架:RuoYi、微信小程序
  • 开发工具:VSCode、IDEA、Eclipse、WebStorm、HbuildX、Navicat、Xshell、Android Studio、Postman
  • 数据库技术:MySQL、Redis、SQL Server
  • 版本控制:Git

在开发Vue应用时,我们经常需要模拟API响应,以便在后端服务尚未准备好时进行前端开发。Mock.js是一个强大的工具,可以帮助我们轻松创建模拟数据。本教程将指导你如何在Vue项目中集成和使用Mock.js。

安装Mock.js

首先,你需要在你的Vue项目中安装Mock.js。

npm i mockjs

创建Mock数据

在你的项目中创建一个mock目录,并添加一个index.js文件。在这个文件中,我们将定义我们的模拟数据。

// src/mock/index.js
import Mock from 'mockjs'

// 创建模拟数据
const data = Mock.mock({
  'list|1-10': [{
    'id|+1': 1
  }]
})

// 模拟API响应
Mock.mock('/api/list/', 'get', () => {
  return data.list;
})

在Vue应用中导入Mock数据

main.js文件中,导入并使用Mock数据。

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import '@/mock' // 导入Mock数据

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

使用Mock数据

在Vue组件中,你可以像往常一样使用fetchaxios来请求模拟的API。

// page.vue
<template>
  <div>
    <!-- 组件内容 -->
  </div>
</template>

<script setup lang="ts">
import request from '@/request/index';
import { onMounted, ref } from 'vue'

onMounted(() => {
  request.get('/list/').then((res: any) => {
    console.log(res.data);
  })
})
</script>

<style scoped></style>

配置Axios

为了更好地管理API请求,我们通常会使用Axios。首先安装Axios。

npm i axios

然后创建一个config目录,并添加一个index.js文件来配置Axios。

// src/config/index.js
export const baseURL = '/api'
export const timeout = 10000
export const headers = { 'X-Custom-Header': 'foobar' }

接着创建一个request.js文件来封装Axios请求。

import axios from "axios";
import { baseURL, timeout, headers } from "@/config";

//@ts-ignore
const request = axios.create({
  baseURL,
  timeout,
  headers,
});

// 添加请求拦截器
request.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    return config;
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
request.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    return response;
  },
  function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

export default request;

配置Vite代理

如果你的开发环境需要代理API请求,你可以在vue.config.js中配置代理。

// vue.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [
    vue(),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  },
  server: {
    proxy: {
      "/api": {
        target: "http://localhost:5174/",
        changeOrigin: true,
        rewrite: (path) => path.replace(/\/api/, ""),
      },
    },
  },
})

更多示例

// 使用 Mock
import Mock from 'mockjs'

const data = Mock.mock({
    // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
    'swiper|4-8': [{
        swiperAlt  :'@ctitle',
        swiperSrc  :"@image('500x300', '#578bba', '#fff', 'jpg', 'Test Image')"
    }],
    'notice|2-4': [{
        noticeId     :"@cword(10,20)",
        noticeTitle	 :'@ctitle',
        noticeContent:'@csentence',
        status       :"@cword(10,20)",
    }],
    'message|4-8': [{
        messageId	    :"@cword(10,20)",
        messageTitle    :'@ctitle',
        messageIntro    :'@csentence',
        messageType	    :"@cword(10,20)",
        messageCover    :"@image('200x200', '#f00', '#fff', 'jpg', 'H')",
        messageContent  :'@csentence',
        status	        :"@cword(10,20)",
        sortId	        :"@cword(10,20)",
    }],
    'sort|4-8': [{
        sortId	  :"@cword(10,20)",
        sortTitle :'@ctitle',
        sortType  :"@cword(10,20)",
        status	  :"@cword(10,20)",
    }],
    'view|4-8': [{
        'reviewId|1-10' :1,
        reviewRoot	    :'@ctitle',
        reviewContent	:'@csentence',
        reviewRelevance	:"@cword(10,20)",
        status	        :"@cword(10,20)",
        messageId	    :"@cword(10,20)",
    }],
    'active|4-8': [{
        activeId	  :"@cword(10,20)",
        activeTitle	  :'@ctitle',
        activeIntro	  :"@cword(10,20)",
        activeCover	  :"@image('200x200', '#f00', '#fff', 'jpg', 'H')",
        activeContent :'@csentence',
        activeStart	  :'@date',
        activeEnd	  :'@date',
        activeAddress :"@cword(10,20)",
        status	      :"@cword(10,20)",
    }],
    'service|4-8': [{
        serveId	    :"@cword(10,20)",
        serveTitle  :'@ctitle',
        serveCover  :"@image('200x200', '#f00', '#fff', 'jpg', 'H')",
        serveDesc   :'@csentence',
        status	    :"@cword(10,20)",
    }],
    'elder|4-8': [{
        homeId       :'@cword(10,20)',
        homeTitle    :'@ctitle',
        homePrice    :'@cword(10,20)',
        homeCover	 :"@image('200x200', '#f00', '#fff', 'jpg', 'H')",
        homeAddress  :'@cword(10,20)',
        homeTag      :'@cword(10,20)',
        homeBedNum   :'@cword(10,20)',
        homeType     :'@cword(10,20)',
        homeNature   :'@cword(10,20)',
        homeArea     :'@cword(10,20)',
        homeSetup    :'@cword(10,20)',
        homeConnect  :'@cword(10,20)',
        homeLongitude:'@cword(10,20)',
        homeLatitude :'@cword(10,20)',
        homeIntro    :'@cword(10,20)',
        status       :'@cword(10,20)',
    }],
    'user|1': [{
        userId      :'@cword(10,20)',
        userAcc     :'@cword(10,20)',
        userPwd     :'@cword(10,20)',
        userName    :'@cword(10,20)',
        userSex     :'@cword(10,20)',
        userAge     :'@cword(10,20)',
        userIde     :'@cword(10,20)',
        userPhone   :'@cword(10,20)',
        userCity    :'@cword(10,20)',
        userAddress :'@cword(10,20)',
    }],
    'userActive|4-8': [{
        activeId	   :'@cword(10,20)',
        activeTitle	   :'@ctitle',
        activeIntro	   :'@cword(10,20)',
        activeCover	   :"@image('200x200', '#f00', '#fff', 'jpg', 'H')",
        activeContennt :'@csentence',
        activeStart	   :'@cword(10,20)',
        activeEnd	   :'@cword(10,20)',
        activeAddress  :'@cword(10,20)',
        status	       :'@cword(10,20)',
    }],
    'userServe|4-8': [{
        serveId     :'@cword(10,20)',
        serveTitle  :'@ctitle',
        serveCover  :"@image('200x200', '#f00', '#fff', 'jpg', 'H')",
        serveDesc   :'@csentence',
        status      :'@cword(10,20)',
    }],
})

Mock.mock('/api/swiper/list', 'post', () => {
    return data.swiper
})
Mock.mock('/api/message/list', 'post', () => {
    return data.message
})
Mock.mock('/api/sort/list', 'post', () => {
    return data.sort
})
Mock.mock('/api/review/list', 'post', () => {
    return data.view
})
Mock.mock('/api/active/list', 'post', () => {
    return data.active
})
Mock.mock('/api/service/list', 'post', () => {
    return data.service
})
Mock.mock('/api/elder/list', 'post', () => {
    return data.elder
})
Mock.mock('/api/user/list', 'post', () => {
    return data.user
})
Mock.mock('/api/userActive/list', 'post', () => {
    return data.userActive
})
Mock.mock('/api/userServe/list', 'post', () => {
    return data.userServe
})

以上就是在Vue项目中使用Mock.js进行API模拟的完整步骤。通过这些步骤,你可以在前端开发过程中轻松地模拟后端API,从而提高开发效率。


📌 联系方式

如果您对我们的项目感兴趣,或者有任何技术问题想要探讨,欢迎通过以下方式与我联系。我非常期待与您交流,共同学习,共同进步!


🎉 结语

感谢你的访问,如果你对我的技术文章或项目感兴趣,欢迎通过以上方式与我联系。让我们一起在技术的道路上不断前行!🚀


;