Vue3+vite4使用mockjs进行模拟开发遇到的坑

Vue3+vite4使用mockjs进行模拟开发遇到的坑

最近没那么忙了,就想着自己写一个后台管理系统的小demo。刚好最近把Vue3的文档撸了一遍,正好可以顺便练习一下Vue3+ts。

插件

1、mockjs是必不可少的。
2、vite-plugin-mock。由于现在创建Vue3项目默认都使用vite,而不再是webpack(没有说webpack不好的意思),在vite中使用mockjs的话,是需要借助 这个插件
3、axios(用原生的也行,注意跨越问题)

npm install mockjs vite-plugin-mock axios
or
yarn add mockjs vite-plugin-mock axios

配置vite.config.ts

// vite.config.ts
import { fileURLToPath, URL } from "node:url";
import type { UserConfigExport, ConfigEnv } from "vite";

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { resolve } from "path";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
import { viteMockServe } from "vite-plugin-mock"; // 从插件中导入viteMockServe 

export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
    viteMockServe(), // 跟vue一样被当作函数执行,里面有一些参数可配置。这里不具体展开介绍。感兴趣的小伙伴自己去查阅资料哈
  ],
  resolve: {
    alias: {
      "@": resolve(__dirname, "src"),
    },
  },
  css: {
    preprocessorOptions: {
      less: {
        modifyVars: {
          hack: `true; @import (reference) "${resolve(
            "src/assets/css/global.less"
          )}";`,
        },
        javascriptEnabled: true,
      },
    },
  },
});

编写接口和造假数据

在项目根目录下创建一个名为mock的文件夹,在文件夹下面创建index.ts文件

// mock/index.ts
import type { MockMethod } from "vite-plugin-mock";  // !!!看这里,这个MockMethod 是个类型,不是方法,导入的时候要type。要么就直接不导入,直接在文件中到处一个数组即可
const arr: any = [];
for (let index = 0; index < 20; index++) {
  arr.push({
    customer_name: "wade",
    status_text: "登录成功",
    os: "Windows 10",
    browser: "Chrome(99.0.4844.51)",
    ip: "192.168.9.110",
    created: "2021-12-14 10:41:02",
    location: "局域网 局域网",
  });
}

const logList = {
  total: 31,
  page: 1,
  page_size: 20,
  list: arr,
};

const statusList = {
  data: [
    { label: "全部", value: 0 },
    { label: "待审核", value: 1 },
  ],
};

export default [
  {
    url: "/api/getList",
    method: "post",
    response: () => {
      return logList;
    },
  },
  {
    url: "/api/getStatusList",
    method: "get",
    response: () => {
      return statusList;
    },
  },
] as MockMethod[];

接口调用

<template>
  <div class="home-page">
    <h1>我是首页</h1>
    <button @click="aa">按钮</button>
  </div>
</template>
<script lang="ts" setup>
import axios from "axios";
function aa() {
  // 调用的时候如果报错404,请认真检查一下自己的url是否存在(我就是粗心写错了,还在网上查了半天,尴尬)
  axios.get("/api/getStatusList").then((res) => {
    console.log("login", res);
  });
}
</script>
<style scoped lang="less">
.home-page {
  width: 1200px;
  background-color: pink;
}
</style>

接口调用结果

在这里插入图片描述

到此,Vue3+Vite+ts 使用mockjs算是调通了。但是,请大家注意这里的type: import type { MockMethod } from “vite-plugin-mock”; 如果要导入这个类型,一定要加type(网上好多都没有加),不加的话项目运行的时候会报一堆node的错。

在这里插入图片描述
大概长这样,加了之后就能顺利运行啦!当然,也可以不使用 MockMethod 直接导出一个数组即可

// mock/index.ts
export default [
  {
    type: "get",
    url: "/user/login",
    response: () => {
      return { isAuth: true };
    },
  },
];
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 创建一个 Vue3 项目并安装 vite 在命令行中输入以下命令: ``` vue create vue3-todolist cd vue3-todolist npm install -g vite ``` 2. 引入和配置 mockjs 在 `src` 目录下新建一个 `mock` 文件夹,在其中创建 `index.js` 文件并输入以下代码: ```javascript import Mock from 'mockjs' Mock.mock('/api/todolist', 'get', { 'list|5-10': [{ 'id|+1': 1, 'title': '@cparagraph(1)', 'completed|1': true }] }) ``` 这里我们使用了 `Mock.mock()` 方法模拟了一个接口,它会返回一个数组,其中每个对象都有 `id`、`title` 和 `completed` 三个属性。 我们可以通过链接地址 `/api/todolist` 来获取这个接口的数据。 在 `main.js` 中通过下面的代码引入 mockjs: ```javascript import './mock' ``` 3. 创建和配置组件 在 `src/components` 目录下创建 `TodoList.vue` 文件,并输入以下代码: ```vue <template> <div> <h2>Todo List</h2> <ul> <li v-for="item in list" :key="item.id"> <input type="checkbox" v-model="item.completed"> <span :class="{ 'completed': item.completed }">{{ item.title }}</span> </li> </ul> </div> </template> <script> import axios from 'axios' export default { name: 'TodoList', data() { return { list: [] } }, methods: { getList() { axios.get('/api/todolist').then(res => { this.list = res.data.list }).catch(err => { console.log(err) }) } }, mounted() { this.getList() } } </script> <style> .completed { text-decoration: line-through; } </style> ``` 这里我们使用了 Axios 发送请求,并通过 `v-for` 指令和 `list` 数组渲染出列表。 同时,我们使用 `v-model` 双向绑定了每个任务的完成状态,并为已完成的任务添加了下划线样式。 在 `src/App.vue` 中引入 `TodoList` 组件,并使用它: ```vue <template> <div id="app"> <TodoList /> </div> </template> <script> import TodoList from './components/TodoList.vue' export default { name: 'App', components: { TodoList } } </script> ``` 4. 运行项目 在命令行中输入以下命令启动项目: ``` npm run dev ``` 然后在浏览器中访问 `http://localhost:3000/`,即可看到我们通过 mockjs 模拟的 todo list 数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值