Vue3项目配置Mock模拟接口数据

举报
青年码农 发表于 2022/08/25 00:19:32 2022/08/25
【摘要】 mock是一个模拟数据生成器,旨在帮助前端独立于后端进行开发。使前端不用去调用后端的接口,即可完成前端单元测试。 当一个项目开始开发,正常情况是前后台开发同时进行,但是很多情况是后台先提供接口,然后前端才开始编写页面,这样就会导致项目进度缓慢,为了解决这个问题,前端一般是根据接口先在本地进行数据模拟请求,本次我们使用M...

mock是一个模拟数据生成器,旨在帮助前端独立于后端进行开发。使前端不用去调用后端的接口,即可完成前端单元测试

当一个项目开始开发,正常情况是前后台开发同时进行,但是很多情况是后台先提供接口,然后前端才开始编写页面,这样就会导致项目进度缓慢,为了解决这个问题,前端一般是根据接口先在本地进行数据模拟请求,本次我们使用Mockjs,实现在基于Vue3项目的数据模拟。

1.安装Mockjs

Mockjs提供npm包,所以安装比较方便

yarn add mockjs
  

2.配置Mock

我们配置方法可以按照官方提供的,写的比较详细,这里我们稍微加点自己的方法,方便我们在添加mock模块的时候更加方便。

配置统一入口

在src文件夹下新建mock文件夹,文件夹中新建index.js,这个js文件作为统一入口文件,之后添加的所有的Mock数据都经过这个文件解析后,统一注册。

7d9bee3819964308d2efc7c6991fa01f.png

index.js文件内容如下:


   
  1. /**
  2.  * Mock配置文件
  3.  **/
  4. // 首先引入Mock
  5. const Mock = require('mockjs');
  6. // 设置拦截ajax请求的相应时间
  7. Mock.setup({
  8.     timeout: '200-600'
  9. });
  10. let configArray = [];
  11. // 使用webpack的require.context()遍历所有Mock文件
  12. const files = require.context('.'true, /\.js$/);
  13. files.keys().forEach((key) => {
  14.     if (key === './index.js'return;
  15.     configArray = configArray.concat(files(key).default);
  16. });
  17. // 注册所有的Mock服务
  18. configArray.forEach((item) => {
  19.     for (let [path, target] of Object.entries(item)) {
  20.         let protocol = path.split('|');
  21.         Mock.mock(new RegExp('^' + protocol[1]), protocol[0], target);
  22.     }
  23. });

main.js中导入


   
  1. import { createApp } from "vue";
  2. import App from "./App.vue";
  3. import router from "./router";
  4. import store from "./store";
  5. // 导入mock
  6. require('./mock');
  7. createApp(App)
  8.   .use(store)
  9.   .use(router)
  10.   .mount("#app");

3.编写模拟数据接口

编写请求数据方法

比如我们有个登录接口,一般我们会在src文件夹下新建api文件夹,里面定义我们所有的请求接口方法,这里,我们也不例外,src/api/basis/下新建login.js,内容如下:


   
  1. import { liSend } from '@/utils/request'
  2. // 测试请求
  3. export const login = (obj) => { return liSend("post""login", obj) };

这里面我们只关注,请求方式是post,url是login。

编写mock返回数据方法

src/mock/basis/下新建login.js,内容如下:


   
  1. /******************
  2.  * 基础 - 登录 - mock
  3.  *****************/
  4. // 登录
  5. let Login = {
  6.     "code"0,
  7.     "msg""success",
  8.     "data": {}
  9. }
  10. export default {
  11.     /**
  12.      * 基础 - 登录
  13.      * @param: {}    
  14.      * @returns:Promise {<pending>}
  15.      **/
  16.     'post|login': option => {
  17.         return Login
  18.     }
  19. }

4.调用mock数据

新建组件

新建组件,组件内调用login方法,返回数据。


   
  1. <template>
  2.   <div>请求数据:{{ state.loginMsg }}</div>
  3.   <button @click="loginBtn">获取mock数据</button>
  4. </template>
  5. <script>
  6. import { reactive, provide } from "vue";
  7. import { login as loginDemo } from "@/api/basis/login";
  8. export default {
  9.   setup(props, context) {
  10.     const state = reactive({
  11.       loginMsg: {}
  12.     });
  13.     const loginBtn = () => {
  14.       loginDemo().then(res => {
  15.         state.loginMsg = res;
  16.       });
  17.     };
  18.     return {
  19.       loginBtn,
  20.       state
  21.     };
  22.   }
  23. };
  24. </script>

预览效果

bf2df5ee364ccdf5fa6be423a45136ed.gif

文章来源: blog.csdn.net,作者:NMGWAP,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/NMGWAP/article/details/125067151

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。