使用axios自定义headers字段,报错 Authorization is not allowed by Access-Control-Allow-Headers

Request header field Authorization is not allowed by Access-Control-Allow-Headers in preflight response
核心需要在后台设置 httpResponse.setHeader("Access-Control-Allow-Header", "Origin, Content-Type, Authoration, ...")

axios定义config自己所需的header参数
 

// promise封装 https://www.npmjs.com/package/axios
import Axios from 'axios'
import JSbridge from "./JSbridge";
import { Notify,Toast } from 'vant';

// 统一处理请求
Axios.defaults.baseURL = '设置默认请求的url' // 设置默认请求的url
Axios.defaults.timeout = 12000
Axios.defaults.headers.post['Content-Type'] = 'application/json;charset=utf-8'

// 添加请求拦截器
Axios.interceptors.request.use(function (config) {
  // 根据method对数据进行整合,post请求时根据conten-type做数据格装换
  if (/^post$/i.test(config.method)) {
    console.log("config",config)
    // 后台接收的JSON格式的字符串 基本都是post
    let local = JSON.parse(localStorage.getItem('localToken'))
    if(local){
      config.headers['app_version'] = local.versionName
      config.headers['appname'] = local.appname
      config.headers['appcersioncode'] = local.appcersioncode
      config.headers['packagename'] = local.packagename
      config.headers['type'] = 'android'
    }
    config.params && (config.data = config.params)
    delete config.params
    let newContentType = config.headers['Content-Type']
    if (!newContentType || newContentType.indexOf('application/json') !== -1) {
      // 数据类型为'application/json'时,需要对数据进行转换
      config.data = JSON.stringify(config.data)
      console.log(config.data)
    }
  } else {
    config.data && (config.params = config.data)
    delete config.data
  }
  // 在请求中动态设置headers
  let url = config.url;
  let local = JSON.parse(localStorage.getItem('localToken'))
  if(local){
    if (url.indexOf("cashloan/queryLoanAmount") > -1 || url.indexOf("applyCredit/submitApplyStart") > -1 || url.indexOf("bank/saveUserBank") > -1 || url.indexOf("cashloan/drawCashApplyTrans") > -1) {
      config.headers['devicefinger'] = local.devicefinger
      config.headers['latitude'] = local.latitude
      config.headers['longitude'] = local.longitude
      config.headers['city'] = "unkown"
      config.headers['macaddress'] = local.macaddress
      config.headers['manufacturer'] = local.manufacturer
      config.headers['mobiletype'] = local.mobiletype
      config.headers['ip'] = local.ip
      config.headers['os'] = local.os
      config.headers['ossdk'] = local.ossdk
      config.headers['nettype'] = local.nettype
      config.headers['brand'] = local.brand
    }
  }
  console.log("config.headers: " + JSON.stringify(config.headers))
  return config
}, function (error) {
  // 请求错误返回
  console.log(error)
  return Promise.reject(error)
})

Axios.interceptors.response.use((response) => {
  return response;
}, function (error) {
  console.log('请求状态码错误')
  return Promise.reject(error);
});

export default (reqObj, successCallback, errorCallback, failCallback) => {
  let LoadingToast;
  let defaultOpts = {
    method: 'GET',
    showLoading: true
  }
  if(defaultOpts.showLoading){
    // 爱的魔力转圈圈
    LoadingToast = Toast.loading({
      duration: 0, // 持续展示 toast
      forbidClick: true,
    });
  }
  Object.assign(defaultOpts, reqObj)
  Axios(defaultOpts).then((response) => {
    console.log('成功:'+JSON.stringify(response))
    LoadingToast.clear()
    if (parseInt(response.data.realData.code) === 10088 ) {
      Notify({ type: 'danger', message: 'Kedaluwarsa, Silakan masuk lagi' });
      localStorage.clear()
      JSbridge.callHandler('loginOut', 'ok', (data) => {
        console.log(data)
      })
    } else if (parseInt(response.data.realData.code) === 10086) {
      typeof successCallback === 'function' && successCallback(response.data)
    } else {
      Notify({ type: 'danger', message: response.data.realData.msg });
      typeof errorCallback === 'function' && errorCallback(response.data)
    }
  }).catch((response) => {
    console.log(response)
    LoadingToast.clear()
    if (typeof failCallback === 'function') {
      failCallback(response.data)
    } else {
      console.log('请求发生错误的接口:', JSON.stringify(reqObj.url), JSON.stringify(response.data))
      Notify({ type: 'danger', message: 'Kesalahan server terjadi, coba lagi nanti' });
      // Notify({ type: 'danger', message: '服务器发生错误,请稍后重试'+JSON.stringify(response.data) });
    }
  })
}

/**
 * @param   {url:'/xxxx',method:'post',data:{}} reqObj
 *          reqObj特殊参数说明:
 *          url:              请求的地址,字符串
 *          method:           请求的方法,post或者get
 *          data:             请求的参数,对象
 *          loadingOptions    请求时加载特效的位置,target为id和class
 *          其余参数设置参考axios文档
 * @param  {function} successCallback    请求成功的回调函数
 * @param  {function} errorCallback      请求失败的回调函数
 * @param  {function} failCallback       请求错误的回调函数
 */

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值