Vite+Vue3使用MockJS的实现示例

 更新时间:2024年01月02日 11:21:51   作者:枫叶梨花  
写一些纯前端的项目时,自己造数据有些麻烦,于是我们可以利用mock造一些简单的数据,来满足我们的需求,本文主要介绍了Vite+Vue3使用MockJS的实现示例,感兴趣的可以了解一下

在使用Vue3开发的时候,有时候没有后端或者后端接口还没有准备好,那就需要使用Mock模拟数据便于前端开发。

现在就记录一下Vite+Vue3的环境下如果使用MockJS。

版本

  • vue 3.3.11
  • mockjs 1.1.0
  • axios 1.6.3

Mockjs配置使用

使用pnpm命令安装Mockjs

pnpm install axios
pnpm install mockjs

mock模拟接口

src目录下新建文件夹mock,并新建文件index.ts,引入mockjs

import Mock from 'mockjs'

直接在上面引入,在vscode中会报错

找不到模块“mockjs”或其相应的类型声明。ts(2307)

我是使用pnpm、vite新建的vue3项目,只需要在src目录下的vite-env.d.ts文件下,加入以下配置即可

/// <reference types="vite/client" />

declare module 'mockjs'

main文件下引入mockjs

main.ts文件下引入mockjs

import './mock/index'

编写模拟接口

import Mock from 'mockjs'

Mock.mock("/mock/login","post", {code: 200, token:"login success token"});


Mock.mock("/mock/getGoodsList","get", {
    code: 200, 
    message:"请求成功",
    data:[
        {
            id:1,
            introduce:"旺仔牛奶很好喝!!!",
            title:"旺仔牛奶",
            userId:1
        },
        {
            id:2,
            introduce:"旺旺碎碎冰很冰很好吃!!!",
            title:"旺旺碎碎冰",
            userId:1
        },
        {
            id:3,
            introduce:"喜之郎品牌很好吃!!!",
            title:"喜之郎",
            userId:1
        }
        ,
        {
            id:4,
            introduce:"卫龙辣条很好吃!!!",
            title:"卫龙辣条",
            userId:1
        }
        ,
        {
            id:5,
            introduce:"德芙巧克力很好吃!!!",
            title:"德芙巧克力",
            userId:1
        }
        ,
        {
            id:6,
            introduce:"伊利牛奶很好喝!!!",
            title:"伊利牛奶",
            userId:1
        }
    ]
});

axios配置使用

配置axios

import axios from 'axios'

//创建axios实例
const service = axios.create({
    baseURL:"/mock",
    timeout:5000,
    headers:{
        "Content-Type":"application/json;charset=utf-8"
    }
})

//请求拦截
service.interceptors.request.use((config)=>{
    config.headers=config.headers || {}
    if(localStorage.getItem("token")){
        config.headers.token = localStorage.getItem("token") || ""
    }
    return config
})

// 响应拦截
service.interceptors.response.use((res)=>{
    const code:number = res.data.code
    if(code != 200){
        return Promise.reject(res.data)
    }
    return res
},(err)=>{
    console.log(err)
})

export default service

编写axios的请求接口

import service from ".";
import { LoginData } from "../type/login";

//登录接口
export function login(data:LoginData) {
    return service({
        url:"/login",
        method:"post",
        data
    })
}

//获取商品接口
export function getGoodsList(){
    return service({
        url:"/getGoodsList",
        method:"get",
    })
}

页面中使用axios请求接口

<template>
    <div class="login-box">
        <div class="login-box">
            <el-form ref="ruleFormRef" :model="ruleForm" status-icon :rules="rules" label-width="80px"
                class="login-ruleForm">
                <h2>后台管理系统</h2>
                <el-form-item label="账号:" prop="username">
                    <el-input v-model="ruleForm.username" autocomplete="off" />
                </el-form-item>

                <el-form-item label="密码:" prop="password">
                    <el-input v-model="ruleForm.password" type="password" autocomplete="off" />
                </el-form-item>
                <el-form-item>
                    <el-button class="loginBtn" type="primary" @click="submitForm(ruleFormRef)">登录</el-button>
                    <el-button class="loginBtn" @click="resetForm">重置</el-button>
                </el-form-item>
            </el-form>
        </div>
    </div>
</template>
 
<script lang="ts" setup>
import { reactive,ref } from 'vue';
import { LoginData } from '../type/login';
import type { FormInstance } from "element-plus";
import { login } from "../request/api";
import { useRouter } from "vue-router";

const ruleForm = reactive<LoginData>({username:"",password:""});

const rules = {
      username: [
        {
          required: true,
          message: "请输入你的账号",
          trigger: "blur",
        },
        {
          min: 3,
          max: 10,
          message: "账号的长度在3到10之间",
          trigger: "blur",
        },
      ],
      password: [
        {
          required: true,
          message: "请输入你的密码",
          trigger: "blur",
        },
        {
          min: 3,
          max: 10,
          message: "密码的长度在3到10之间",
          trigger: "blur",
        },
      ],
    };


    const resetForm = () => {
        ruleForm.username = "";
        ruleForm.password = "";
    };

    const ruleFormRef = ref<FormInstance>();
    const router=useRouter()//-->$router
    const submitForm = (formEl: FormInstance | undefined) => {
      if (!formEl) return;
      // 对表单的内容进行验证
      // valid布尔类型,为true表示验证成功,反之
      formEl.validate((valid) => {
        if (valid) {
          // console.log("submit!");
          login(ruleForm).then((res) => {
             console.log(res);
            // 将token进行保存
            localStorage.setItem("token", res.data.token);
            // 跳转页面,首页
            router.push('/')
          });
        } else {
          console.log("error submit!");
          return false;
        }
      });
      // console.log(formEl);
    };
</script>

<style lang="scss" scoped>
.login-box {
    width: 100%;
    height: 100%;
    background: url('../assets/bg.jpg');

    padding: 1px;
    .login-ruleForm{
        width: 500px;
        margin: 200px auto;
        background-color: #fff;
        padding: 40px;
        border-radius: 20px;
    }
    .loginBtn {
        width: 48%;
    }
    h2 {
        margin-bottom: 10px;
    }
}
</style>

到此这篇关于Vite+Vue3使用MockJS的实现示例的文章就介绍到这了,更多相关Vite Vue3使用MockJS内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • vue-calendar-component 封装多日期选择组件的实例代码

    vue-calendar-component 封装多日期选择组件的实例代码

    这篇文章主要介绍了vue-calendar-component 封装多日期选择组件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • vue.js入门教程之绑定class和style样式

    vue.js入门教程之绑定class和style样式

    小编之前介绍了通过vue.js计算属性,不知道大家都学会了吗。那这篇文章中我们将一起学习vue.js实现绑定class和style样式,有需要的朋友们可以参考借鉴。
    2016-09-09
  • 在nuxt使用vueX代替storage的实现方案

    在nuxt使用vueX代替storage的实现方案

    这篇文章主要介绍了在nuxt使用vueX代替storage的实现方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue键盘事件keyup、keydown的作用

    vue键盘事件keyup、keydown的作用

    这篇文章主要介绍了vue键盘事件keyup、keydown的作用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • vue-cli脚手架搭建的项目去除eslint验证的方法

    vue-cli脚手架搭建的项目去除eslint验证的方法

    今天小编就为大家分享一篇vue-cli脚手架搭建的项目去除eslint验证的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue+Vant实现7天日历展示并在切换日期时实时变换功能

    Vue+Vant实现7天日历展示并在切换日期时实时变换功能

    本文介绍了如何利用Vue和Vant框架结合moment.js插件来实现一个7天日历展示功能,在这个功能中,用户可以在切换日期时看到界面的实时变化,此外,文章还提供了代码实现和效果测试的详细步骤,帮助开发者能够顺利完成类似的项目开发
    2024-10-10
  • Vue3实现动态路由与手动导航

    Vue3实现动态路由与手动导航

    这篇文章主要为大家详细介绍了如何在 Vue 3 中实现动态路由注册和手动导航,确保用户访问的页面与权限对应,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • Vue Element UI + OSS实现上传文件功能

    Vue Element UI + OSS实现上传文件功能

    这篇文章主要为大家详细介绍了Vue Element UI + OSS实现上传文件功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • vue-quill-editor富文本编辑器简单使用方法

    vue-quill-editor富文本编辑器简单使用方法

    这篇文章主要为大家详细介绍了vue-quill-editor富文本编辑器简单使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • vue Aes加解密实践

    vue Aes加解密实践

    文章主要讲述了在Vue项目中安装并使用crypto-js进行AES加解密的操作,提及了与RSA加密的不同,并提到因密钥长度问题可能需要修改源码,最后强调内容为个人经验,仅供参考
    2026-05-05

最新评论