在vite+ vue3环境中使用mock接口数据

1、安装axios和mock

yarn add axios
yarn add mockjs

2、封装axios请求

//src/request/axios.js


import axios, { AxiosResponse, AxiosRequestConfig } from 'axios';
import { ElMessage } from 'element-plus'


const service = axios.create({
  timeout:5000
});

// Request interceptors
service.interceptors.request.use(
  (config: AxiosRequestConfig) => {
    // do something
    // console.log('config',config);
    
    return config;
   },
   (error: any) => {
    Promise.reject(error);
   }
);

// Response interceptors
service.interceptors.response.use(
  (response: AxiosResponse) => {
    // do something
    // console.log('response',response);
    // return
    if(response.status !== 200){
      ElMessage({
        type:'error',
        message:'服务器忙,请稍后再试~'
      })
      return 
    }

    return response
   },
   (error: any) => {
    // do something
    return Promise.reject(error);
   }
);

export default service;

3、封装接口

//src/api/user/index.js

import service from "@/request/axios";


export function getNewsList (query) {
  return service({
    method:'get',
    url:'/mock/news',
    params:query
  })
}
export function getGoodsList (query) {
  return service({
    method:'post',
    url:'/mock/goods',
    data:query
  })
}

4、配置mock接口

//src/mock/goods.js

// 引入mockjs
import Mock from 'mockjs'
// 获取 mock.Random 对象
const Random = Mock.Random

const produceGoodsData = function (data) {
  console.log(data,'接收post参数');
  let body  = JSON.parse(data.body)
  console.log(body);
  let produceGoodsData = []
  for (let i = 0; i < 2; i++) {
    let goodsObject = {
      ...body
    }
    produceGoodsData.push(goodsObject)
  }
 
  return produceGoodsData
}
Mock.mock('/mock/goods','post', produceGoodsData) 
//src/mock/mock.js


// 引入mockjs
 import Mock from 'mockjs'
// 获取 mock.Random 对象
const Random = Mock.Random
// mock新闻数据,包括新闻标题title、内容content、创建时间createdTime
const produceNewsData = function () {
  let newsList = []
  for (let i = 0; i < 20; i++) {
    let newNewsObject = {
      title: Random.ctitle(), //  Random.ctitle( min, max ) 随机产生一个中文标题,长度默认在3-7之间
      content: Random.cparagraph(), // Random.cparagraph(min, max) 随机生成一个中文段落,段落里的句子个数默认3-7个
      createdTime: Random.date() // Random.date()指示生成的日期字符串的格式,默认为yyyy-MM-dd;
    }
    newsList.push(newNewsObject)
  }
 
  return newsList
}

// 请求该url,就可以返回newsList
Mock.mock('/mock/news',  produceNewsData) // 后面讲这个api的使用细节

在vite或者webpack环境下都可以批量导入模块,方式有点区别,我这里是vite环境的方式,不用手动一个一个导入了,是不是很方便

// 批量导入mock模块
let mockMoudles = []
const modules = import.meta.globEager('./*.js');
console.log(modules);
Object.keys(modules).forEach(i => {
  mockMoudles.push(i)
})
export default mockMoudles

5、在main.js入口文件中导入

import { createApp } from 'vue'
import App from './App.vue'
import './mock/index.js'
// ​创建vue实例
const app = createApp(App)

6、测试接口

//app.vue

import { getNewsList, getGoodsList } from '@/api/user/index'

// mock数据
const handleMock = async() => {
	let data = await getGoodsList({name:'tom'})
	console.log(data);
	
}

<h1 @click="handleMock">Mock</h1>

在这里插入图片描述
这样就OK了

对于Vue3和Vite的开发环境,需要在项目安装Vue3和Vite相应的包。然后,通过在Vite配置文件配置mock数据,实现TodoList数据的模拟。 首先,在项目根目录下安装VueVite: ``` npm install vue@next vite --save-dev ``` 然后,在Vite的配置文件vite.config.js配置mock数据: ```javascript module.exports = { server: { // 模拟API // 然后在api路径下,也就是在example/src/api路径下, // 根据接口路径,创建对应名称的.js文件,如/todo.js port: 3000, open: true, // 这里需要配置一下,否则会断开连接 cors: true, // 利用间件,可以实现 mock 数据 // https://www.cnblogs.com/zero--007/p/11227108.html // 具体的编写方式可以参考上述链接 middleware: [createMockMiddleware()], }, }; ``` 其,createMockMiddleware()方法是自定义的mock函数,示例代码如下: ```javascript const { createMockMiddleware } = require('vite-plugin-mock'); // 模拟数据 const todoData = [ { id: 1, label: "学习Vue3", done: false }, { id: 2, label: "学习Vite", done: false }, { id: 3, label: "学习TypeScript", done: true }, { id: 4, label: "整理网络知识", done: false }, ] module.exports = function () { return createMockMiddleware({ // 基于api路径,返回对应的数据 // 比如,在example/src/api/todo.js,就可以定义获取todoList数据的方法 // 比如: // export default [ // { // url: '/api/todo/list', // method: 'post', // response: () => { // return { // code: 200, // data: todoData // } // } // }, // ]; mockFiles: "src/api/*.js", }); }; ``` 在api路径下,就可以创建对应名称的js文件,如/todo.js。在该文件,就可以定义获取todoList数据的方法,示例代码如下: ```javascript const todoData = [ { id: 1, label: "学习Vue3", done: false }, { id: 2, label: "学习Vite", done: false }, { id: 3, label: "学习TypeScript", done: true }, { id: 4, label: "整理网络知识", done: false }, ]; export default [ { url: "/api/todo/list", method: "post", response: () => { return { code: 200, data: todoData, }; }, }, ]; ``` 最后,在组件使用api路径,获取todoList数据: ```javascript import { reactive, toRefs, onMounted } from "vue"; import axios from "axios"; export default { setup() { const state = reactive({ todoList: [], }); // 获取 todoList 数据 const getTodoList = () => { axios.post("/api/todo/list").then((res) => { state.todoList = res.data.data; }); }; // 组件加载时执行获取 todoList 数据 onMounted(() => { getTodoList(); }); // 最后需要将响应式对象转换为普通对象 return { ...toRefs(state) }; }, }; ``` 这样就可以实现Vue3和Vite环境下的TodoList数据模拟。请注意,本示例仅是提供了一个参考,实际的代码实现可能需要更加详细、复杂的设计,具体的实现方式可以参考VueVite的官方文档,或者搜索相关的博客、论坛等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值