Blame view

mock/index.js 1.73 KB
80a28914e   吉鹏   init
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
  import Mock from 'mockjs'
  import { param2Obj } from '../src/utils'
  
  import user from './user'
  import table from './table'
  
  const mocks = [
    ...user,
    ...table
  ]
  
  // for front mock
  // please use it cautiously, it will redefine XMLHttpRequest,
  // which will cause many of your third-party libraries to be invalidated(like progress event).
  export function mockXHR() {
    // mock patch
    // https://github.com/nuysoft/Mock/issues/300
    Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
    Mock.XHR.prototype.send = function() {
      if (this.custom.xhr) {
        this.custom.xhr.withCredentials = this.withCredentials || false
  
        if (this.responseType) {
          this.custom.xhr.responseType = this.responseType
        }
      }
      this.proxy_send(...arguments)
    }
  
    function XHR2ExpressReqWrap(respond) {
      return function(options) {
        let result = null
        if (respond instanceof Function) {
          const { body, type, url } = options
          // https://expressjs.com/en/4x/api.html#req
          result = respond({
            method: type,
            body: JSON.parse(body),
            query: param2Obj(url)
          })
        } else {
          result = respond
        }
        return Mock.mock(result)
      }
    }
  
    for (const i of mocks) {
      Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
    }
  }
  
  // for mock server
  const responseFake = (url, type, respond) => {
    return {
      url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
      type: type || 'get',
      response(req, res) {
        console.log('request invoke:' + req.path)
        res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
      }
    }
  }
  
  export default mocks.map(route => {
    return responseFake(route.url, route.type, route.response)
  })