mock在vue和jquery中的使用,以及json5小知识点

mock在vue和jquery中的使用,以及json5小知识点

一、mock在jquery中的运用

原理:监听拦截住ajax请求,返回mock处理后的数据。
在这里插入图片描述

使用示例:

目录结构:

在这里插入图片描述

  1. 首先在index.html中引入jquery和mcok

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        //引入jquery和mock
        <script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
        <script src="https://cdn.bootcss.com/Mock.js/1.0.0/mock-min.js"></script>
    </head>
    <body>
        
    </body>
    //设置全局变量,只要MOCK=="true" 时才会拦截
    <script>MOCK='false'</script>
    <script src="./mock/index.js"></script>
    </html>
    
  2. 配置mock监听接口,以及返回数据。./mock/index.js

    if (MOCK == 'true') {
        Mock.mock('/user/userInfo', 'get', {
            id: '@id', //得到随机id
            username: '@cname()', //得到随机姓名
            date: '@date()', //得到随机日期
            avatar: "@image('200x200','red','#fff','avatar')", //得到随机图片
            description: '@paragraph()', //得到随机描述
            ip: '@ip()', //得到随机ip
            email: '@email()', //得到随机邮箱
            haha: 'hahha', //自定义
        })
        Mock.mock('/user/login', 'post', {
            id: '@id', //得到随机id
            username: '@cname()', //得到随机姓名
            date: '@date()', //得到随机日期
            avatar: "@image('200x200','red','#fff','avatar')", //得到随机图片
            description: '@paragraph()', //得到随机描述
            ip: '@ip()', //得到随机ip
            email: '@email()', //得到随机邮箱
            haha: 'hahha', //自定义
        })
    }
    
  3. 发起请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/Mock.js/1.0.0/mock-min.js"></script>
</head>
<body>
    
</body>
<script>MOCK='true'</script>
<script src="./mock/index.js"></script>
<script>
    // $.ajax({
    //     url:'/user/userInfo',
    //     dataType:'json',
    //     success:(data)=>{
    //         console.log(data);
    //     }
    // })
    $.ajax({
        url:'/user/login',
        dataType:'json',
        method:'post',
        success:(data)=>{
            console.log(data);
        }
    })
</script>
</html>

效果

在这里插入图片描述

二、mock在vue中的运用

利用devserver的before中间件做监听。

在这里插入图片描述

项目目录:

在这里插入图片描述

  1. 首先项目中引入mock和json5,以及我们要发请求的axios

npm install axios --save

npm install mock --save-dev

npm install json5 --save-dev

详情看package.json
{
  "name": "mock_dome",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "axios": "^0.21.1",
    "core-js": "^3.6.5",
    "vue": "^3.0.0"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "@vue/compiler-sfc": "^3.0.0",
    "babel-eslint": "^10.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-vue": "^7.0.0-0",
    "json5": "^2.1.3",
    "mockjs": "^1.1.0"
  },
  1. 项目根目录下创建mock目录。

    2.1 创建mock/index.js

    const fs = require('fs');
    const path = require('path');
    const Mock = require('mockjs');
    const JSON5 = require('json5');
    
    //读取json5文件,解析并返回
    function getJsonFile(filePath){
        //读取指定json文件
        var json = fs.readFileSync(path.resolve(__dirname,filePath),'utf-8');
        //解析并返回
        return JSON5.parse(json);
    }
    
    
    //暴露出一个函数
    module.exports = function(app){
       //判断当前环境,如果是dev环境并设置MOCK=true的时候才有mock数据(看第四步配置)
       if(process.env.MOCK == 'true'){
        //监听http请求
        app.get('/user/userInfo',function(req,res){
            //每次响应请求时读取mock data的json文件
            //getJsonFile方法定义了如何读取json文件并解析成数据对象
            var json = getJsonFile('./userInfo.json5');
            //将json传入Mock.mock  方法中,生成的数据返回给浏览器
            res.json(Mock.mock(json));
        })
         //监听http请求
         app.post('/user/login',function(req,res){
            //每次响应请求时读取mock data的json文件
            //getJsonFile方法定义了如何读取json文件并解析成数据对象
            var json = getJsonFile('./userInfo.json5');
            //将json传入Mock.mock  方法中,生成的数据返回给浏览器
            res.json(Mock.mock(json));
        })
    
       }
    
        
    }
    

​ 2.2 创建json数据,mock/userInfo.json5

json5文件和json文件的区别是,json5文件可以添加注释,切不需要属性名和属性值都用双引号包起来。

{
    id:'@id',//得到随机id
    username:'@cname()',//得到随机姓名
    date:'@date()',//得到随机日期
    avatar:"@image('200x200','red','#fff','avatar')",//得到随机图片
    description:'@paragraph()',//得到随机描述
    ip:'@ip()',//得到随机ip
    email:'@email()',//得到随机邮箱
    haha:'hahha',//自定义

}
  1. 项目根目录下创建vue.config.js文件

    module.exports = {
        devServer:{
            before:require('./mock/index.js') //引入mock/index.js
        }
    }
    
  2. 配置在开发环境中使用mock,根目录新建.env.development文件

    MOCK = true
    
  3. 在组件中发请求测试

    mounted(){
         console.log(process.env.MOCK);
        
    
          axios.post('/user/login')
         .then(res=>{
          console.log(res)
         })
         .catch(err=>{
           console.log(err)
         })
    
         setTimeout(() => {
            axios.get('/user/userInfo')
         .then(res=>{
          console.log(res)
         })
         .catch(err=>{
           console.log(err)
         })
         }, 2000);
      }
    

效果

在这里插入图片描述

参考 bilibili视屏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值