vue脚手架中mock.js的使用

1.现在公司很多项目都是 实行的前后端分离的开发模式 而这个导致的往往是前后端并行开发 

如果前端已经开发完了  后端还没有准备好接口  我们这个时候就没有测试办法了么 答案是 no

如果你要用请求 json文件 也好 还是使用json-server   这样虽然可以模拟接口 模拟数据 但还是有一个缺点就是数据是静态 想要修改数据还得 去修改文件  修改地方不多还好  多的话 就很累了 

2.这个时候 mock.js  倒是一个不错的选择

生成随机数据,拦截 Ajax 请求     这是mock.js官方 的描述 

2.1.我们先来看下他的拦截功能

使用mock.js 之前我们还是先安装 

npm i mockjs -D    // 我们只是在开发环境下测试使用 所以是 安装开发版的

在vue脚手架的src文件夹 新建一个  mock文件夹  创建俩个文件  mock.js   data.json文件

mock.js中

import Mock from 'mockjs'  //  引入mockjs文件

import data from './data.json'   // 引入数据文件

Mock.mock('http://localhost:3000/list', { data: data.list })    //  模拟端口地址  第一个参数是地址 第二个参数是一个对象 用来存储数据

data,json中

{

    "list":[

        {

            "name":"张三",

            "age":32,

            "height":182

        },{

            "name":"李四",

            "age":25,

            "height":168

        }

    ]

}

同时我们在本地在服务器上开启了一个相同的地址  同样是

http://localhost:3000/list

然后我们在组件中 请求地址 看看

我在请求的时候使用的是axios请求 axios这里我就不讲解了

created() {

    let url = 'http://localhost:3000/list' // 拦截ajax请求

    axios.get(url).then(res => {

      console.log(res.data)

    })

  }

预料之中最后在浏览器中打印是mockjs中的模拟数据

这里可能有的童鞋 还不相信 那我们再修改mockjs中的监听地址  

改成   Mock.mock('http://localhost:5000/list', { data: data.list })      // 5000端口

我们还是请求3000端口  下图的数据确实变化 变成了我们服务器开启那个地址上的数据  端口改变了 他就不会拦截了 

2.2 好了 mock.js拦截 功能我们就讲到这里  拦截并不是mock.js最吸引我的地方 最吸引的是它可以生成随机数

有时候我们可能并不想书写 data.json 文件 我们更想的 我们写一些规则 他按照我们书写规则 给我返回一些随机数 不是更好吗

一听到 规则 有没想到什么  (提示下: 正则表达式)

我下面列举一些 规则 

一.  普通规则

Mock.mock('http://localhost:8080/getUser', {

  'name|2': '张三' ,      //  表示  后面的字符 重复一遍  返回    张三张三           

  'age|18-35': 20         //  age   年龄  在   18-35 之间取值  20是默认值    (18-35 童鞋们猜到为什么用这个数据范围嘛)

})

二. 正则表达式规则

Mock.mock('http://localhost:8080/getData', {

  regexp1: /[a-z][A-Z][0-9]/,              //返回字段 regexp  三个字符   第一个小写字母 第二个大写字母 第三个 数字 如:aA0

  regexp2: /\d{5,10}/                 //  返回字段 regexp  返回一个 5到10位的数字  如:88888888 (当然这个数据出来几率特别低)

})

三.生成随机文字和图片,时间

Mock.mock('http://localhost:8080/getInfo', {

  'info|10-20': [      // 返回info字段 是一个数组   数组元素个数为 10 -20  个

    {

      'index|+1': 1,     //  返回 index  字段  从1开始 往后面 依次+1

      name: '@first @last',   // 返回名字  前后一个单词 中间空格隔开

      id: '@integer(10000,99999) ',   //  id字段  是一个整数  从  10000 到 99999 中取值

      date: '@datetime',   // 返回当前系统时间

      img: '@image("200*200")',    //  生成一个  200*200 的图片

      text: '@sentence(6,22)'   // 生成 一个 英文字段    6到22个 英文字母组成的小片段

    }

  ]

})

四.生成中文字段

let Random = Mock.Random  // 用一个变量存储 Mock生成随机数的对象

let productData = () => {

  let productList = []  // 用来存储生成的数据

  for (let i = 0; i < 100; i++) {   // 生成100条数据

    let product = {

      name: Random.ctitle(5, 20),    //  中文标题 5到20个汉字

      img: Random.dataImage('125x125', Random.integer(1, 100)), // 生成图片  125x125  图片上有文字 1-100

      price: Random.integer(1000, 10000), //  返回家价格   1000-10000之间

      owner: Random.cname()    // 随机生成一个中文名字

    }

    productList.push(product)    // 生成一个数据  推入到数组中 

  }

  return productList   // 返回数据

}

Mock.mock('http://localhost:3000/getList', productData)   //  模拟监听的端口 

然后我们就可以在组件中使用了

是不是很强大 我第一次学习的时候 这个就是最吸引我的地方  不用再等着 后端的接口了

3.在真正工作的时候 让然不会让我们在这个文件中写这么多接口  维护起来也比较麻烦 

这个时候就需要我们进行统一接口配置

再脚手架src文件下 新建立一个 server.config.js文件

const MOCKURL = 'http://localhost:3000/' // mock模拟地址

 const SERVERURL = '' “ // 真实请求地址 ,产品上线

const URL = {

  getUser: MOCKURL + 'getUser',

  getInfo: MOCKURL + 'getInfo'

}

export default URL   // 导出对象

建立这样文件 也是一是方便我们维护 而且看起来也清晰、

当我们上线的时候 只需要把 MOCKURL 替换成 SERVERURL 

然后就是再组件中使用 

import  url from "@/server.config.js"

ccreated(){

       this.$aioxs.get(url.getUser).then(res=>{console.log(res.data);this.userList=res.data});

}

 好了到此 结束了 那也不会或者哪里有错误   请大家指出

发布了141 篇原创文章 · 获赞 64 · 访问量 9144

猜你喜欢

转载自blog.csdn.net/yunchong_zhao/article/details/104219346