Blame view

mock/index.js 1.96 KB
80a28914e   吉鹏   init
1
  import Mock from 'mockjs'
a86b16bba   Adam   auto commit the c...
2
3
4
  import {
    param2Obj
  } from '../src/utils'
80a28914e   吉鹏   init
5
6
  
  import user from './user'
d7d9c38c2   Adam   auto commit the c...
7
  import role from './role'
a86b16bba   Adam   auto commit the c...
8
  import prod from './prod'
d7d9c38c2   Adam   auto commit the c...
9
10
  import article from './article'
  import search from './remote-search'
a86b16bba   Adam   auto commit the c...
11
  //因为没有Mock上,所以会请求不到数据。报404
80a28914e   吉鹏   init
12
13
  const mocks = [
    ...user,
d7d9c38c2   Adam   auto commit the c...
14
15
    ...role,
    ...article,
a86b16bba   Adam   auto commit the c...
16
    ...prod,
d7d9c38c2   Adam   auto commit the c...
17
    ...search
80a28914e   吉鹏   init
18
19
20
21
22
23
24
25
26
  ]
  
  // 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
a86b16bba   Adam   auto commit the c...
27
    Mock.XHR.prototype.send = function () {
80a28914e   吉鹏   init
28
29
30
31
32
33
34
35
36
37
38
      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) {
a86b16bba   Adam   auto commit the c...
39
      return function (options) {
80a28914e   吉鹏   init
40
41
        let result = null
        if (respond instanceof Function) {
a86b16bba   Adam   auto commit the c...
42
43
44
45
46
          const {
            body,
            type,
            url
          } = options
80a28914e   吉鹏   init
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
73
74
75
76
77
78
79
          // 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)
  })