index.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import Mock from 'mockjs'
  2. const response = require("./serverApi.json")
  3. const { getSetting } = window.systemParamsUtils;
  4. export default mockXHR;
  5. export function mockXHR(){
  6. const baseUrl = getSetting("BASE_API")
  7. if (response && response.data && response.data.mocks instanceof Array) {
  8. response.data.mocks.map(item => {
  9. let reqURI = item.url ;
  10. if (item.url) {
  11. let keys = reqURI.split("?")[0].split("/")
  12. keys.map((key) => {
  13. if (key.startsWith(":")) {
  14. reqURI = reqURI.replace(key, "[a-zA-Z0-9_]*")
  15. }else if(key.startsWith("{")&&key.endsWith("}")){
  16. reqURI = reqURI.replace(key, "[a-zA-Z0-9_]*")
  17. }
  18. })
  19. }
  20. Mock.mock(new RegExp(baseUrl + reqURI), item.method, function (options) {
  21. let data;
  22. if (item.mode instanceof Array) {
  23. data = item.mode;
  24. } else if (item.mode instanceof Object) {
  25. data = item.mode
  26. } else {
  27. data = eval("(" + item.mode + ")")
  28. }
  29. const {body, url} = options
  30. let args = {
  31. query: param2Obj(url)
  32. }
  33. if(typeof body === "string" ){
  34. try{
  35. args.body =JSON.parse(body)
  36. }catch (e) {
  37. args.body = param2Obj("http://zzz?"+body)
  38. }
  39. }
  40. let regUrl = baseUrl + item.url;
  41. let reqUrlKeys = options.url.split("/");
  42. regUrl.split("/").map((key,index)=>{
  43. if(key!== reqUrlKeys[index]){
  44. args.query[key.substr(1)] = reqUrlKeys[index]
  45. }
  46. })
  47. transFunc2Data(data, args)
  48. return Mock.mock(data)
  49. })
  50. })
  51. } else {
  52. console.error("serverApi.json有问题!~~")
  53. }
  54. }
  55. function transFunc2Data(data, arg) {
  56. for (let key in data) {
  57. if (data[key] instanceof Function) {
  58. let tmpFn = data[key];
  59. data[key] = tmpFn({_req: arg, Mock})
  60. } else if (data[key] instanceof Object) {
  61. transFunc2Data(data[key], arg)
  62. }
  63. }
  64. }
  65. /**
  66. * @param {string} url
  67. * @returns {Object}
  68. */
  69. function param2Obj(url) {
  70. const search = url.split('?')[1]
  71. if (!search) {
  72. return {}
  73. }
  74. return JSON.parse(
  75. '{"' +
  76. decodeURIComponent(search)
  77. .replace(/"/g, '\\"')
  78. .replace(/&/g, '","')
  79. .replace(/=/g, '":"')
  80. .replace(/\+/g, ' ') +
  81. '"}'
  82. )
  83. }