ttk-app-core
Version:
@ttk/recat enterprise develop framework
72 lines (67 loc) • 1.86 kB
JavaScript
import Mock from 'mockjs'
// import table from './mockFiles/table'
// import demoTable from '@/app-demo/table/mock'
import mockFetch from './fetch-mockjs'
import appMocks from './loader'
const mocks = [
// ...table,
...appMocks
]
// 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() {
mockFetch(Mock)
// 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 param2Obj(url) {
const search = url.split('?')[1]
if (!search) {
return {}
}
return JSON.parse(
'{"' +
decodeURIComponent(search)
.replace(/"/g, '\\"')
.replace(/&/g, '","')
.replace(/=/g, '":"')
.replace(/\+/g, ' ') +
'"}'
)
}
function XHR2ExpressReqWrap(respond) {
return function (options) {
let result = null
if (respond instanceof Function) {
const { body='{}', method, url } = options
// https://expressjs.com/en/4x/api.html#req
try{
result = respond({
url,
method,
body: JSON.parse(body),
query: param2Obj(url)
})
}catch(error){
console.log(body, error)
}
} else {
result = respond
}
return Mock.mock(result)
}
}
for (const i of mocks) {
Mock.mock(new RegExp(`${i.url}`), i.type || 'get', XHR2ExpressReqWrap(i.response))
}
}