前端Vue使用封装Mock.js和api请求模拟数据案例(带源码)

一:准备阶段

1.安装mockjs axios

npm install mockjs --save
npm install axios --save

2.main.js全局引入

import './utils/mock'//此部分引入的是我们所编写的mockjs文档
import axios from 'axios'
Vue.prototype.$axios = axios

二:使用阶段

1.src下面创建api文件里面在创建request.js封装好的api,代码如下:

import axios from 'axios'
// 案例!!!!!
export function getCase() {
  return axios.get('/api/case')
}

// 文本列表
export function county() {
  return axios.get('/api/getObject')
}

// 折线数据
export function getList() {
  return axios.post('/api/line')
}

// home折线数据
export function getLine() {
  return axios.post('/api/lineAdd')
}



axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'

// 请求拦截器
axios.interceptors.request.use(function (config) {
  return config;
}, function (error) {
  return Promise.reject(error);
})
// 响应拦截器
axios.interceptors.response.use(function (response) {
  return response;
}, function (error) {
  return Promise.reject(error);
})

// 封装axios的post请求
export function fetch(url, params) {
  return new Promise((resolve, reject) => {
    axios.post(url, params)
      .then(response => {
        resolve(response.data);
      })
      .catch((error) => {
        reject(error);
      })
  })
}

export default {
  mockdata(url, params) {
    return fetch(url, params);
  }
}

2.src下面创建utils文件里面在创建mock.js封装好的模拟数据库,写接口造数据地方代码如下:
官方文档mock.js更多数据案例: http://mockjs.com/examples.html

Mock.mock( rurl, rtype, function( options ) ) rurl 需要拦截的url
rtype 需要拦截的ajax请求类型 function( options ) 用于生成响应数据的函数
记录用于生成响应数据的函数。当拦截到匹配 rurl 和 rtype 的 Ajax 请求时,函数 function(options)
将被执行,并把执行结果作为响应数据返回。

import Mock from 'mockjs'
// 案例!!!!和详解意思,还是不懂看文档
Mock.mock('/api/case', 'get', () => {
  return Mock.mock({
    "mtime": "@datetime", //随机生成日期时间
    "score|1-800": 800, //随机生成1-800的数字
    "rank|1-100": 100, //随机生成1-100的数字
    "stars|1-5": 5, //随机生成1-5的数字
    "nickname": "@cname", //随机生成中文名字
  })
})

// 返回字符串
Mock.mock('/api/data', 'get', () => {
  return Mock.mock({
    'string|3': '*' //  string 代表字符串名称  后面3代表个数
  })
})

// 返回指定范围的整数
Mock.mock('/api/getInteger', () => {
  return Mock.mock({
    'a|1-100': 100 // 
  })
})

// 返回随机数组
Mock.mock('/api/getArr', () => {
  return Mock.mock({
    'data|1-30': [{
      'name': '张三'
    }]
  })
})

// 返回随机字符
Mock.mock('/api/getRandom1', () => {
  return Mock.mock({
    'random1': /[a-z]{2}[A-Z]{2}[0-9]/
  })
})

// 返回随机字符
Mock.mock('/api/getRandom2', () => {
  return Mock.mock({
    random2: '@string("lower", 5)'
  })
})

// 返回UUID
Mock.mock('/api/getUUID', () => {
  return {
    'uuid': Mock.Random.id()
  }
})


// 返回随机个数的对象
Mock.mock('/api/getObject', () => {
  return Mock.mock({
    'list|10': [{
      'id|+1': 1,
      'classroom|1': ['精品语文班', '精品作业A班', '英语班', '语文班'],
      'from|1': ['到店咨询', '微店', '壹家教', '学习服务平台'],
      'status|1': ['意识强烈', '预报名', '意向一般', '暂无意向'],
    }],
    name: Mock.Random.cname(), //随机产生一个中文的姓名
    addr: Mock.mock('@county(true)'), //随机生成一个地址
    'age|18-60': 1, //随机生成一个数字 大小在18到60
    birth: Mock.Random.date(), //随机生成一个日期
    sex: Mock.Random.integer(0, 1), //随机生成一个整数,0/1 ,根据这个来给“男” “女”
    email: Mock.mock('@EMAIL()'), //随机生成一个邮箱
    'moblie|1': ['13531544954', '13632250649', '15820292420', '15999905612'], //在数组中随机找一个
    'num1|1-100.2': 1, //1-100 中随机生成一个保留两位小数点
    'num2|100-300.2': 1,
    'classroom|1': ['精品语文班', '精品作业A班', '英语班', '语文班'],
    'from|1': ['到店咨询', '微店', '壹家教', '学习服务平台'],
    'status|1': ['意识强烈', '预报名', '意向一般', '暂无意向'],
    time: Mock.Random.date('yyyy-MM-dd'),
    mobile: /^1[0-9]{10}$/ //用正则匹配1开头的11位数字的手机号
  })
})



// 第二种~~~~~
// const cateData = {"data":[{"all":484,"children":[{"all":120,"pid":10000,"quesId":10001,"quesName":"武汉"},{"all":100,"pid":10000,"quesId":10002,"quesName":"鄂州"},{"all":90,"pid":10000,"quesId":10003,"quesName":"咸宁"},{"all":66,"pid":10000,"quesId":10004,"quesName":"黄冈"},{"all":88,"pid":10000,"quesId":10005,"quesName":"荆州"}],"pid":1,"quesId":10000,"quesName":"湖北"},{"all":450,"children":[{"all":100,"pid":11000,"quesId":11001,"quesName":"广州"},{"all":200,"pid":11000,"quesId":11002,"quesName":"惠州"},{"all":70,"pid":11000,"quesId":11003,"quesName":"珠海"},{"all":80,"pid":11000,"quesId":11004,"quesName":"佛山"}],"pid":1,"quesId":11000,"quesName":"广东"},{"all":243,"children":[{"all":88,"pid":12000,"quesId":12001,"quesName":"杭州"},{"all":100,"pid":12000,"quesId":12002,"quesName":"宁波"},{"all":20,"pid":12000,"quesId":12003,"quesName":"温州"},{"all":35,"pid":12000,"quesId":12004,"quesName":"嘉兴"}],"pid":1,"quesId":12000,"quesName":"浙江"},{"all":285,"children":[{"all":220,"pid":13000,"quesId":13001,"quesName":"成都"},{"all":20,"pid":13000,"quesId":13002,"quesName":"雅安"},{"all":45,"pid":13000,"quesId":13003,"quesName":"绵阳"}],"pid":1,"quesId":13000,"quesName":"四川"},{"all":235,"children":[{"all":75,"pid":14000,"quesId":14001,"quesName":"济南"},{"all":90,"pid":14000,"quesId":14002,"quesName":"青岛"},{"all":40,"pid":14000,"quesId":14003,"quesName":"烟台"},{"all":30,"pid":14000,"quesId":14004,"quesName":"威海"}],"pid":1,"quesId":14000,"quesName":"山东"},{"all":285,"children":[{"all":120,"pid":15000,"quesId":15001,"quesName":"台北"},{"all":60,"pid":15000,"quesId":15002,"quesName":"桃园"},{"all":50,"pid":15000,"quesId":15003,"quesName":"高雄"},{"all":55,"pid":15000,"quesId":15004,"quesName":"新竹"}],"pid":1,"quesId":15000,"quesName":"台湾"},{"all":595,"children":[{"all":220,"pid":16000,"quesId":16001,"quesName":"南京"},{"all":110,"pid":16000,"quesId":16002,"quesName":"无锡"},{"all":150,"pid":16000,"quesId":16003,"quesName":"苏州"},{"all":80,"pid":16000,"quesId":16004,"quesName":"连云港"},{"all":35,"pid":16000,"quesId":16005,"quesName":"盐城"}],"pid":1,"quesId":16000,"quesName":"江苏"},{"all":760,"children":[{"all":150,"pid":17000,"quesId":17001,"quesName":"黄埔"},{"all":120,"pid":17000,"quesId":17002,"quesName":"徐汇"},{"all":100,"pid":17000,"quesId":17003,"quesName":"静安"},{"all":130,"pid":17000,"quesId":17004,"quesName":"普陀"},{"all":100,"pid":17000,"quesId":17005,"quesName":"虹口"},{"all":100,"pid":17000,"quesId":17006,"quesName":"闵行"},{"all":60,"pid":17000,"quesId":17007,"quesName":"嘉定"}],"pid":1,"quesId":17000,"quesName":"上海"},{"all":900,"children":[{"all":240,"pid":18000,"quesId":18001,"quesName":"东城"},{"all":220,"pid":18000,"quesId":18002,"quesName":"西城"},{"all":120,"pid":18000,"quesId":18003,"quesName":"朝阳"},{"all":120,"pid":18000,"quesId":18004,"quesName":"海淀"},{"all":100,"pid":18000,"quesId":18005,"quesName":"通州"}],"pid":1,"quesId":18000,"quesName":"北京"},{"all":840,"children":[{"all":200,"pid":19000,"quesId":19001,"quesName":"渝中"},{"all":120,"pid":19000,"quesId":19002,"quesName":"万州"},{"all":160,"pid":19000,"quesId":19003,"quesName":"陪陵"},{"all":120,"pid":19000,"quesId":19004,"quesName":"江北"},{"all":80,"pid":19000,"quesId":19005,"quesName":"沙坪坝"},{"all":120,"pid":19000,"quesId":19006,"quesName":"九龙坡"},{"all":40,"pid":19000,"quesId":19007,"quesName":"渝北"}],"pid":1,"quesId":19000,"quesName":"重庆"},{"all":1430,"children":[{"all":200,"pid":20000,"quesId":20001,"quesName":"福田"},{"all":220,"pid":20000,"quesId":20002,"quesName":"罗湖"},{"all":360,"pid":20000,"quesId":20003,"quesName":"南山"},{"all":210,"pid":20000,"quesId":20004,"quesName":"盐田"},{"all":120,"pid":20000,"quesId":20005,"quesName":"宝安"},{"all":120,"pid":20000,"quesId":20006,"quesName":"龙岗"},{"all":120,"pid":20000,"quesId":20007,"quesName":"龙华"},{"all":80,"pid":20000,"quesId":20008,"quesName":"坪山"}],"pid":1,"quesId":20000,"quesName":"深圳"},{"all":600,"children":[{"all":600,"pid":21000,"quesId":21001,"quesName":"新加坡"}],"pid":1,"quesId":21000,"quesName":"新加坡"},{"all":100,"children":[{"all":100,"pid":22000,"quesId":22001,"quesName":"东京"}],"pid":1,"quesId":22000,"quesName":"东京"},{"all":600,"children":[{"all":600,"pid":23000,"quesId":23001,"quesName":"莫斯科"}],"pid":1,"quesId":23000,"quesName":"莫斯科"},{"all":550,"children":[{"all":550,"pid":24000,"quesId":24001,"quesName":"梵蒂冈"}],"pid":1,"quesId":24000,"quesName":"梵蒂冈"},{"all":211,"children":[{"all":211,"pid":25000,"quesId":25001,"quesName":"纽约"}],"pid":1,"quesId":25000,"quesName":"纽约"},{"all":163,"children":[{"all":163,"pid":26000,"quesId":26001,"quesName":"尼日利亚"}],"pid":1,"quesId":26000,"quesName":"尼日利亚"}],"message":"请求成功","status":200}
// function getCateData() {
//   return cateData
// }
// const departData = {"data": [{"deptName": "南山","all":360,"done": 300},{"deptName": "东城区","all":240,"done": 200},{"deptName": "渝中","all":200,"done": 200},{"deptName": "黄埔","all":150,"done": 150},{"deptName": "新加坡","all":600,"done": 580},{"deptName": "莫斯科","all":600,"done": 600},{"deptName": "梵蒂冈","all":550,"done": 500},{"deptName": "成都","all":220,"done": 220},{"deptName": "纽约","all":211,"done":211},{"deptName": "罗湖","all":220,"done": 210}],"message":"请求成功","status":200}
// function getDepartTop() {
//   return departData
// }
// export { getCateData, getDepartTop }


// 返回随机个数
const cateData = {
  "data": [{
    "all": 484,
    "children": [{
      "all": 120,
      "pid": 10000,
      "quesId": 10001,
      "quesName": "武汉"
    }, {
      "all": 100,
      "pid": 10000,
      "quesId": 10002,
      "quesName": "鄂州"
    }, {
      "all": 90,
      "pid": 10000,
      "quesId": 10003,
      "quesName": "咸宁"
    }, {
      "all": 66,
      "pid": 10000,
      "quesId": 10004,
      "quesName": "黄冈"
    }, {
      "all": 88,
      "pid": 10000,
      "quesId": 10005,
      "quesName": "荆州"
    }],
    "pid": 1,
    "quesId": 10000,
    "quesName": "湖北"
  }, {
    "all": 450,
    "children": [{
      "all": 100,
      "pid": 11000,
      "quesId": 11001,
      "quesName": "广州"
    }, {
      "all": 200,
      "pid": 11000,
      "quesId": 11002,
      "quesName": "惠州"
    }, {
      "all": 70,
      "pid": 11000,
      "quesId": 11003,
      "quesName": "珠海"
    }, {
      "all": 80,
      "pid": 11000,
      "quesId": 11004,
      "quesName": "佛山"
    }],
    "pid": 1,
    "quesId": 11000,
    "quesName": "广东"
  }],
  "message": "请求成功",
  "status": 200
}
Mock.mock('/api/k', () => {
  return cateData
})

// 返回随机个数折线数据pie1和pie2用的接口
Mock.mock('/api/line', () => {
  return Mock.mock({
    // 'list|10': [{
    //   'id|+1': 1,
    //   'classroom|1': ['精品语文班', '精品作业A班', '英语班', '语文班'],
    //   'from|1': ['到店咨询', '微店', '壹家教', '学习服务平台'],
    //   'status|1': ['意识强烈', '预报名', '意向一般', '暂无意向'],
    // }],
    // 'list:10': [{
    //   'id|+1': 1,
    //   
    // }]
    'list|3': [{
      'id|+1': 1,
      'name|3': ['@cname'], //随机产生一个中文的姓名
      'time|3': ['@DATETIME("yyyy-MM-dd HH:mm:ss")'],
      // 'content': '@cparagraph',
      'num|2': ['@float(1, 300)']
    }],
  })
})

// 返回随机个数折线数据pie1和pie2用的接口
Mock.mock('/api/lineAdd', () => {
  return Mock.mock({
    'list|3': [{ //  list 代表数组名称  后面3代表个数
      'id|+1': 1,
      'name': ['@cname'], //随机产生一个中文的姓名
      'time': ['@DATETIME("yyyy-MM-dd HH:mm:ss")'],
      // 'content': '@cparagraph',
      'num|5': ['@float(1, 300)']
    }],
    'list2|3': [{
      'id|+1': 1,
      'name': ['@cname'], //随机产生一个中文的姓名
      'time': ['@DATETIME("yyyy-MM-dd HH:mm:ss")'],
      // 'content': '@cparagraph',
      'num|5': ['@float(1, 300)']
    }],
    'list3|3': [{
      'id|+1': 1,
      'name': ['@cname'], //随机产生一个中文的姓名
      'time': ['@DATETIME("yyyy-MM-dd HH:mm:ss")'],
      // 'content': '@cparagraph',
      'num|5': ['@float(1, 300)']
    }],
  })
})

3.使用页面组件,随便创建一个,配置路由,代码如下

<template>
  <div>页面</div>
</template>

<script>
import {getCase} from '../api/request'  // 路径要匹配对上!!!
export default {
  mounted(){
    this.getData();
  },
  methods:{
    getData(){        // 也可以用原生的直接写路径请求
      getCase({}).then(res => {
        console.log(res,'res~~~~');
      })
    }
  }
}
</script>

4.效果如下图

在这里插入图片描述

这是单独加案例模拟登录接口
// 用户登录
Mock.mock('/login', 'post', options => {
    const {userName, userPassword} = JSON.parse(options.body)
    const user = users.find(item => {
        return item.username === userName && item.password === userPassword
    })

    return user
})

感觉文章好的话记得点个心心和关注,有错的地方麻烦指正一下,多谢!!!

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值