Blame view

node_modules/uview-ui/libs/luch-request/helpers/buildURL.js 1.76 KB
c7add6cf   “wangming”   初始版本开发完毕
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
  'use strict'

  

  import * as utils from '../utils'

  

  function encode(val) {

      return encodeURIComponent(val)

          .replace(/%40/gi, '@')

          .replace(/%3A/gi, ':')

          .replace(/%24/g, '$')

          .replace(/%2C/gi, ',')

          .replace(/%20/g, '+')

          .replace(/%5B/gi, '[')

          .replace(/%5D/gi, ']')

  }

  

  /**

   * Build a URL by appending params to the end

   *

   * @param {string} url The base of the url (e.g., http://www.google.com)

   * @param {object} [params] The params to be appended

   * @returns {string} The formatted url

   */

  export default function buildURL(url, params) {

      /* eslint no-param-reassign:0 */

      if (!params) {

          return url

      }

  

      let serializedParams

      if (utils.isURLSearchParams(params)) {

          serializedParams = params.toString()

      } else {

          const parts = []

  

          utils.forEach(params, (val, key) => {

              if (val === null || typeof val === 'undefined') {

                  return

              }

  

              if (utils.isArray(val)) {

                  key = `${key}[]`

              } else {

                  val = [val]

              }

  

              utils.forEach(val, (v) => {

                  if (utils.isDate(v)) {

                      v = v.toISOString()

                  } else if (utils.isObject(v)) {

                      v = JSON.stringify(v)

                  }

                  parts.push(`${encode(key)}=${encode(v)}`)

              })

          })

  

          serializedParams = parts.join('&')

      }

  

      if (serializedParams) {

          const hashmarkIndex = url.indexOf('#')

          if (hashmarkIndex !== -1) {

              url = url.slice(0, hashmarkIndex)

          }

  

          url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams

      }

  

      return url

  }