Source: sdk-file/src/web/request.js

const HError = require('core-module/HError')
const utils = require('core-module/utils')
const constants = require('core-module/constants')
const axios = require('axios')

axios.interceptors.response.use(function (response) {
  response.statusCode = response.status
  return response
}, function (error) {
  throw error.response
})

module.exports = function (BaaS) {
  /**
   * 网络请求
   * @function
   * @memberof BaaS
   * @param {BaaS.WebRequestParams} params 参数
   * @return {Promise<BaaS.Response<any>>}
   */
  BaaS.request = ({url, method = 'GET', data = {}, header = {}, headers = {}}) => {
    return utils.mergeRequestHeader(Object.assign({}, header, headers)).then(headers => {
      return new Promise((resolve, reject) => {
        if (!BaaS._config.CLIENT_ID) {
          return reject(new HError(602))
        }

        if (!/https?:\/\//.test(url)) {
          const API_HOST = BaaS._polyfill.getAPIHost()
          url = API_HOST.replace(/\/$/, '') + '/' + url.replace(/^\//, '')
        }

        let payload = { method, url, headers }

        if (method.toUpperCase() === 'GET') {
          payload.params = data
        } else {
          payload.data = data
        }

        axios(payload).then(resolve, reject)
        utils.log(constants.LOG_LEVEL.INFO, 'Request => ' + url)
      })
    }).catch(utils.validateStatusCode)
  }
}