Blame view

uni_modules/uv-ui-tools/libs/luch-request/adapters/index.js 3.79 KB
1af1c1b1   易尊强   2/29 17:39
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
  import buildURL from '../helpers/buildURL'
  import buildFullPath from '../core/buildFullPath'
  import settle from '../core/settle'
  import {isUndefined} from "../utils"
  
  /**
   * 返回可选值存在的配置
   * @param {Array} keys - 可选值数组
   * @param {Object} config2 - 配置
   * @return {{}} - 存在的配置项
   */
  const mergeKeys = (keys, config2) => {
    let config = {}
    keys.forEach(prop => {
      if (!isUndefined(config2[prop])) {
        config[prop] = config2[prop]
      }
    })
    return config
  }
  export default (config) => {
    return new Promise((resolve, reject) => {
      let fullPath = buildURL(buildFullPath(config.baseURL, config.url), config.params, config.paramsSerializer)
      const _config = {
        url: fullPath,
        header: config.header,
        complete: (response) => {
          config.fullPath = fullPath
          response.config = config
          response.rawData = response.data
          try {
            let jsonParseHandle = false
            const forcedJSONParsingType = typeof config.forcedJSONParsing
            if (forcedJSONParsingType === 'boolean') {
              jsonParseHandle = config.forcedJSONParsing
            } else if (forcedJSONParsingType === 'object') {
              const includesMethod = config.forcedJSONParsing.include || []
              jsonParseHandle = includesMethod.includes(config.method)
            }
  
            // 对可能字符串不是json 的情况容错
            if (jsonParseHandle && typeof response.data === 'string') {
              response.data = JSON.parse(response.data)
            }
            // eslint-disable-next-line no-empty
          } catch (e) {
          }
          settle(resolve, reject, response)
        }
      }
      let requestTask
      if (config.method === 'UPLOAD') {
        delete _config.header['content-type']
        delete _config.header['Content-Type']
        let otherConfig = {
          // #ifdef MP-ALIPAY
          fileType: config.fileType,
          // #endif
          filePath: config.filePath,
          name: config.name
        }
        const optionalKeys = [
          // #ifdef APP-PLUS || H5
          'files',
          // #endif
          // #ifdef H5
          'file',
          // #endif
          // #ifdef H5 || APP-PLUS || MP-WEIXIN || MP-ALIPAY || MP-TOUTIAO || MP-KUAISHOU
          'timeout',
          // #endif
          'formData'
        ]
        requestTask = uni.uploadFile({..._config, ...otherConfig, ...mergeKeys(optionalKeys, config)})
      } else if (config.method === 'DOWNLOAD') {
        const optionalKeys = [
          // #ifdef H5 || APP-PLUS || MP-WEIXIN || MP-ALIPAY || MP-TOUTIAO || MP-KUAISHOU
          'timeout',
          // #endif
          // #ifdef MP
          'filePath',
          // #endif
        ]
        requestTask = uni.downloadFile({..._config, ...mergeKeys(optionalKeys, config)})
      } else {
        const optionalKeys = [
          'data',
          'method',
          // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN
          'timeout',
          // #endif
          'dataType',
          // #ifndef MP-ALIPAY
          'responseType',
          // #endif
          // #ifdef APP-PLUS
          'sslVerify',
          // #endif
          // #ifdef H5
          'withCredentials',
          // #endif
          // #ifdef APP-PLUS
          'firstIpv4',
          // #endif
          // #ifdef MP-WEIXIN
          'enableHttp2',
          'enableQuic',
          // #endif
          // #ifdef MP-TOUTIAO || MP-WEIXIN
          'enableCache',
          // #endif
          // #ifdef MP-WEIXIN
          'enableHttpDNS',
          'httpDNSServiceId',
          'enableChunked',
          'forceCellularNetwork',
          // #endif
          // #ifdef MP-ALIPAY
          'enableCookie',
          // #endif
          // #ifdef MP-BAIDU
          'cloudCache',
          'defer'
          // #endif
        ]
        requestTask = uni.request({..._config, ...mergeKeys(optionalKeys, config)})
      }
      if (config.getTask) {
        config.getTask(requestTask, config)
      }
    })
  }