• 使用mock.js模拟数据
  • 发布于 2个月前
  • 331 热度
    0 评论
安装相关包
npm install mockjs --save
npm install axios --save
main.js中引入模块
require('./utils/mock');

/* 挂载到原型属性上 */
Vue.prototype.$api = api;
Vue.prototype.$common = common;
Vue.prototype.$axios = axios;
mock.js
import Mock from 'mockjs' // 引入mockjs
import api from '../utils/api';
const Random = Mock.Random; // Mock.Random 是一个工具类,用于生成各种随机数据

let userListData = {
 code: 0,
 msg: '数据查询成功',
 data: {
   result: [],
   totalCount: 20,
   totalPage: 2
}
}
for (let i = 0; i < 10; i++) { // 可自定义生成的个数
 let template = {
   'id': i + 1,
   'username': Random.cname(), // 生成姓名
   'weChat': Random.name(),
   'gender': Random.natural(0, 1),
   'telephone': '13569878965'
}
 userListData.data.result.push(template);
}

console.log(api);
/* 堆代码 duidaima.com  */
/* 获取URL */
/* 拦截用户信息请求 */
let getuserListUrl = api.url.prototype.getuserListUrl() + ".*";
/* 拦截带请求参数和不带请求参数的 请求 */
Mock.mock(RegExp(getuserListUrl), 'get', userListData);

/*
let template = {
  'Boolean': Random.boolean, // 可以生成基本数据类型
  'Natural': Random.natural(1, 10), // 生成1到100之间自然数
  'Integer': Random.integer(1, 100), // 生成1到100之间的整数
  'Float': Random.float(0, 100, 0, 5), // 生成0到100之间的浮点数,小数点后尾数为0到5位
  'Character': Random.character(), // 生成随机字符串,可加参数定义规则
  'String': Random.string(2, 10), // 生成2到10个字符之间的字符串
  'Range': Random.range(0, 10, 2), // 生成一个随机数组
  'Date': Random.date(), // 生成一个随机日期,可加参数定义日期格式
  'Image': Random.image(Random.size, '#02adea', 'Hello'), // Random.size表示将从size数据中任选一个数据
  'Color': Random.color(), // 生成一个颜色随机值
  'Paragraph': Random.paragraph(2, 5), //生成2至5个句子的文本
  'username': Random.cname(), // 生成姓名
  'Url': Random.url(), // 生成web地址
  'Address': Random.province() // 生成地址
}
*/
common.js
import axios from 'axios';

/**
* GET公共请求
* @param {*} url 请求地址
* @param {*} params 请求参数
*/
function getAxios(url, params) {
 return new Promise((resolve, reject) => {
   axios({
       method: 'GET',
       url: url,
       params: params
    })
    .then(res => {
       resolve(res.data, resolve);
    })
    .catch(error => {
       reject(error.data, reject);
    });
});
}
// 暴露接口
export default {
 getAxios: getAxios
};
//post,put,delete自己去封装
api.js
import requestAll from './common';
const apiDomainName = 'http://localhost:8086';
/* 用户列表地址 */
const userListUrl = apiDomainName + '/userList';
/* mock数据测试使用 */
class url {
 getuserListUrl() {
   return userListUrl
}
}
class api {
 /* 获取用户列表信息 */
 getuserListInfo(params) {
   return requestAll.getAxios(userListUrl, params);
}
}
// 暴露接口
export default {
 api,
 url
};
UserListInfo.vue
data() {
   return {
       Request: this.$api.api.prototype,
       Common: this.$common.common.prototype /* 用于获取公共方法 */,
       searchCondition:{
            username:''
        }
  }
}
created() {
   this.getuserListInfo();
}
methods:{
   getuserListInfo() {
       this.$nextTick(() => {
           this.Request.getuserListInfo(this.searchCondition)
              .then((res) => {
               if (res.code === 0) {
                   console.log(res.data.result);
              } else {
                   this.$message.error(res.msg);
              }
          })
              .catch((res) => {
               this.$message.error('服务器繁忙,请稍后再试');
          });
      });
  },
}
结果:生成了10条数据
(10) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0:
   gender: 0
   id: 1
   telephone: "13569878965"
   username: "宋娜"
   weChat: "Michelle Lee"
1: {…}
2: {…}
3: {…}
4: {…}
5: {…}
6: {…}
7: {…}
8: {…}
9: {…}
length: 10
__ob__: Observer {value: Array(10), dep: Dep, vmCount: 0}
__proto__: Array
注意点:Mock.mock()拦截请求的时候,需要注意请求是否有请求参数,不然第一次使用就会遇到请求地址相同,请求却拦截不到的问题,此时可以使用正则表达式进行解决:
Mock.mock(RegExp(api.apiDomainName + '/userList' + ".*"), 'get', userListData);
语法
Mock.mock( rurl?, rtype?, template|function( options ) )
rurl:表示需要拦截的 URL,可以是 URL 字符串或 URL 正则。例如
rtype:表示需要拦截的 Ajax 请求类型。例如 GET、POST、PUT、DELETE 等。
template:表示数据模板,可以是对象或字符串。例如 { 'data|1-10':[{}] }、'@EMAIL'。
所以用  .*进行判断,不管有无参数都可以匹配到
用户评论