mock的三种使用办法

2023/4/18 mock

mock 数据有三种方案

  • yapi
  • 本地 mock
  • mock 服务器 https://www.cnblogs.com/wfblog/p/9583843.html

使用 mock 是为了解决以下问题:

  1. 后端接口未开发完成时,前端写页面使用假数据后期需要改,在后端维护好接口和字段时,就可以先按照约定好的先写
  2. 后端接口开发好,但是 测试环境数据有限,生产环境数据比较全。通过代理本地是可以直接使用生产环境的数据。但是如果生产环境代码有认证系统,认证通过,由服务器决定跳转到指定的 生产上的域名地址。页面没有跳转到本地的域名的地址,无法调试开发。

三种 mock 方案区别:

  1. yapi
  • 在服务端搭建 yapi 服务,这样我们的接口可以维护到 yapi 上,同时,yapi 可以通过我们维护的接口自动生成假数据,我们可以直接连接 yapi 联调
  • 优点:链接 yapi 时,控制台有请求,可以看到请求和响应
  • 缺点:非必须字段 yapi 经常不返回,而且遇到一些约定字段判断处理的时候,yapi 还需要特别配置,例如 status=10 和 status=20 时。这样不利于我们开发
  1. 使用本地 mock
  • 使用 mock 语言生成数据,然后使用 Mock.mock()
    • Mock.mock(url,templete)拦截到匹配 url 的 ajax 请求时,根据数据模板 templete 生成模拟数据作为 i 响应值返回
    • Mock.mock( rurl, function( options ) ) ,当拦截到匹配 rurl 的 Ajax 请求时,函数 function(options) 将被执行,并把执行结果作为响应数据返回。
  • 优点:直接使用 mockjs 作为假数据,在某些地方还是很好用的。比如返回多种不一样的随机数(需要过一会就变化的动态数据)。使用 mockjs 自带的接口可以很方便。
  • 缺点:在控制台没有请求,我们看不到传参和响应值
  1. mock.js
  • mock.js 的优势在于可以通过 js 程序生成 任意数量且随机的数据(如果数据条数很多,js 用一个循环就可以生成,这样就提现出优势来了);
  1. mock 服务器
  • 服务器生成 mock 数据【推荐这种】:webpack 里面自带 express,让 express 执行 Mock 的 JS 文件就可以了
  • 优点:mock 服务器 的数据需要自己对应一个一个输入,使用这种方式完全不需要去配置,很方便,而且是完全接近真实运行环境的。(推荐这种方式,开发时很少会用到大量的数据,自己设置字段也不会很复杂)
// 模拟数据来源: 本地=local; 远程=remote
// const mockType = 'local'
const mockType = 'remote'

devServer: {
    open: true,
    // development server port 8000
    port: 8000,
    // client: {
    //   overlay: {
    //     //  当出现编译器错误或警告时,在浏览器中显示全屏覆盖层
    //     warnings: false,
    //     errors: true
    //   }
    // },
    proxy: mockType === 'remote' && {
      // 配置跨域
      '/api': {
        target: 'http://172.31.1.185:3000/mock/84',
        // ws: true,
        changOrigin: true,
        pathRewrite: {
          '^/api': '/',
        },
      },
      // '/api': {
      //   // target: 'http://192.168.140.117:8080/',
      //   // target: 'http://192.168.140.120:8080/',
      //   // target: 'http://192.168.140.117:8080/', // 赵松--未加密
      //   target: 'http://192.168.140.117:8151/', // 赵松-加密
      //   // target: 'http://192.168.140.25:8080/', // 赵强
      //   //  target: 'http://192.168.140.116:18154', // 王江江
      //   // ws: true,
      //   changOrigin: true,
      //   pathRewrite: {
      //     '^/api': '/',
      //   },
      // },
    },
    // before: devServer => {}
    before: (app) => {
      mockType === 'local' &&
        app.all(/api/, function (req, res) {
          // 导入之前清除缓存, 避免 mock 数据不能实时更新
          Object.keys(require.cache).forEach((key) => {
            if (key.indexOf('mock') > -1) {
              delete require.cache[key]
            }
          })
          // 先在 mockDataMap 中查找是否存在对应的 mock 数据
          const mockDataMap = require('./src/mock/index.js')
          const apiKey = req.path.replace('/api', '')
          const mockData = mockDataMap[apiKey]
          if (typeof mockData === 'function') {
            let body = ''
            req.on('data', (chunk) => {
              body += chunk
            })
            req.on('end', () => {
              const data = mockData(body)
              setTimeout(() => {
                return res.json(data)
              }, data.timeout || 500)
            })
          } else {
            setTimeout(() => {
              return res.status(200).json(mockData)
            }, 500)
          }
        })
    },
  },
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

链接:https://www.cnblogs.com/wfblog/p/9583843.html

Last Updated: 2023/5/26 10:47:56