vue3+vite 使用mock.js

安装mock.js

经测试发现vite-plugin-mock版本太新与vite@4版本不兼容,最好使用2.9.6版本

#npm
npm install mockjs vite-plugin-mock -D

npm install mockjs vite-plugin-mock@2.9.6-D

#yarn
yarn add mockjs vite-plugin-mock -D

yarn add mockjs vite-plugin-mock@2.9.6 -D

vite中mock引入

安装后,需要在vite.config.js文件中引入vite-plugin-mock插件

/*
  vite.config.js
*/

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { viteMockServe } from "vite-plugin-mock";

// https://vitejs.dev/config/
export default defineConfig({
    base: '/',
    plugins: [
        vue(),
        viteMockServe({
            mockPath: "src/mock",//设置mock文件存储目录
            localEnabled: true,//设置是否启用本地mock文件
            prodEnabled: true,//设置打包是否启用 mock 功能
            watchFiles: true,//设置是否监视mockPath对应的文件夹内文件中的更改
            injectCode: `
              import { setupProdMockServer } from './mockProdServer';
              setupProdMockServer();
            `,//如果生产环境开启了 mock 功能,即prodEnabled=true.则该代码会被注入到injectFile对应的文件的底部。默认为main.{ts,js}
            logger: true,//是否在控制台显示请求日志
        }),
    ],
});

创建mock文件夹

src/mock/user.ts (这里以用户登录接口为例)

//createUserList:次函数执行会返回一个数组
function createUserList() {
  return [
    {
      userId: 1,
      username: "admin",
      password: "123456",
      token: "ZHESHICESHITOKEN",
    }
  ]
}
export default [
  {
    url: "/api/user/login", 
    method: "post", 
    response: ({ body }: { body: any }) => {
      //获取请求体携带过来的用户名与密码
      const { username, password } = body;
      //调用获取用户信息函数,用于判断是否有此用户
      const checkUser = createUserList().find(
        (item) => item.username === username && item.password === password
      );
      //没有用户返回失败信息
      if (!checkUser) {
        return { code: 201, data: { message: "账号或者密码不正确" } };
      }
      //如果有返回成功信息
      const { token } = checkUser;
      return { code: 200, data: { token } };
    },
  }
]

创建api文件夹

在src/api文件夹下创建相应的api接口请求函数,进行统一管理。

/* 
  src/api/index.js 
*/

import request from "../utils/request";
export function getTest() {
    return request({
        url: "/api/user/login",
        method: "post",
        params:{data}
    });
}

生产环境下使用mock

创建一个js文件mockProdServer.js,位置和main.js同层,在src/mockProdServer.js。

/* 
  src/mockProdServer.js 
*/
import { createProdMockServer } from "vite-plugin-mock/es/createProdMockServer";
//这里可以把 mock 文件夹下的所有文件都引入
import homeModule from "./mock/index";

export function setupProdMockServer() {
    createProdMockServer([...homeModule]);
}

注意

如果你发现生产环境下无法请求mock接口,原因很有可能是因为你是在onMounted或者onBeforeMount这两个生命周期中请求的。因为vite-plugin-mock插件中用来处理生产环境的函数createProdMockServer还未执行完成,所以无法拦截请求。你的请求会直接发出去,无法通过mock返回数据。

解决方案:①直接在main.js中注入插件配置。(在插件引入中,injectCode字段内的代码);②在onMounted生命周期中使用setTimeout函数执行请求函数

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3 框架和 Vite 工具提供了 Mock 的功能,可以在开发过程中模拟接口数据。 首先,创建一个基础的 TodoList 示例工程,包括“添加任务”、“删除任务”和“显示所有任务”等功能。 main.js ```javascript import { createApp } from 'vue' import App from './App.vue' import './index.css' createApp(App).mount('#app') ``` App.vue ```vue <template> <div id="app"> <h1>Todo List</h1> <input v-model="task" placeholder="Type new task here..." /> <button @click="addTask">Add</button> <ul> <li v-for="(item, index) in tasks" :key="index"> {{ item }} <button @click="removeTask(index)">x</button> </li> </ul> </div> </template> <script> export default { setup() { const tasks = vue.reactive([]) const addTask = () => { tasks.push(task.value) task.value = '' } const removeTask = (index) => { tasks.splice(index, 1) } const task = vue.ref('') return { tasks, task, addTask, removeTask, } }, } </script> ``` index.html ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta name="viewport" content="width=device-width,initial-scale=1.0" /> <title>Todo List</title> </head> <body> <div id="app"></div> <script type="module" src="./main.js"></script> </body> </html> ``` 按照以上代码编写完毕之后,我们开启 Mock 功能,使数据接口的 mock 可以生效。 1.使用 vite-plugin-mock 插件安装 Mock 功能。 ```bash npm install vite-plugin-mock --dev ``` 2.在 vite.config.js 中进行配置。 ```javascript import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import path from 'path' import { createMockMiddleware } from 'vite-plugin-mock' export default defineConfig({ plugins: [vue(), createMockMiddleware()], resolve: { alias: { '@': path.resolve(__dirname, './src'), }, }, }) ``` 3.添加 Mock 数据文件,文件路径为`src/mocks/api/TodoList.js`。 src/mocks/api/TodoList.js ```javascript // Mock data const tasks = [ { id: 1, value: 'Learn Vue 3' }, { id: 2, value: 'Continue working on Todo list' }, { id: 3, value: 'Buy groceries' }, ] // API endpoints export default { 'GET /api/tasks': () => { return tasks }, 'POST /api/tasks': (req) => { const newTask = { id: tasks.length + 1, value: req.body.task, } tasks.push(newTask) return newTask }, 'DELETE /api/tasks/:id': (req) => { const taskId = parseInt(req.params.id) const index = tasks.findIndex((task) => task.id === taskId) if (index !== -1) { tasks.splice(index, 1) } return {} }, } ``` 4.在 main.js 中引入 Mock 数据文件,从而启动 Mock 服务。 main.js ```javascript import { createApp } from 'vue' import App from './App.vue' import './index.css' import '@/mocks' createApp(App).mount('#app') ``` 5.测试是否启动成功。 启动执行`npm run dev`之后,打开浏览器,访问`http://localhost:3000/api/tasks`,可看到我们的 mock 数据。 此时我们对 TodoList 进行的增删改操作也将默认使用我们刚刚配置好的 api/TodoList.js 进行 mock 数据的读写操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值