axios引入设置cookie缓存跨域问题

import axios from 'axios'
import { Loading } from 'element-ui';
import store from '../vuex/store' 
let domain = process.env.API_ROOT;
let axiosInstance = axios.create();
let loadingInstance
//设置cookie缓存跨域问题
axios.defaults.withCredentials = true
axios.defaults.timeout = 500000
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'

axios.requestData=function(config){
   return config;
};
axios.requestData=function(response){
   return response;
};
axios.error=function(error){
   return error;
};
axios.interceptors.request.use((config) => {
   let token=window.localStorage.getItem ("token")
   if(config.url.indexOf('node') != -1){
      loadingInstance = Loading.service({
         lock: true,
         text: '',
         customClass:'comloadings',
         spinner: 'icon iconfont icon-loding',
         background: 'rgba(255,255,255)'
       })
   }
   if(token){
      config.headers.Authorization='Bearer ' + window.localStorage.getItem('token') || ''
   }
    return config
})
// 返回状态判断
axios.interceptors.response.use((res) => { 
   //localStorage.setItem('locale', 'zh')
    if(loadingInstance){
      setTimeout(()=>{
         loadingInstance.close();
      },500)
   }
   if(res.data.errcode === 1001 || res.data.errcode === 1002 || res.data.errcode === 1003 ){        
      window.localStorage.removeItem("token")
      window.localStorage.removeItem("tokenType")
      store.dispatch('clearUser')
       window.location.href = '/login'        
   }else {
       return res
   }
   
  },
  error => {
    if (error && error.res) {
      switch (error.res.status) {
        case 400:
          error.message = '请求错误'
          break
        case 401:
          error.message = '未授权,请登录'
          break
        case 403:
          error.message = '拒绝访问'
          break
        case 404:
          error.message = (process.env.NODE_ENV === 'production' ? `请求地址出错` : `请求地址出错: ${error.response.config.url}`)
          break
        case 408:
          error.message = '请求超时'
          break
        case 500:
          error.message = '服务器内部错误'
          break
        case 501:   
          error.message = '服务未实现'
          break
        case 502:
          error.message = '网关错误'
          break
        case 503:
          error.message = '服务不可用'
          break
        case 504:
          error.message = '网关超时'
          break
        case 505:
          error.message = 'HTTP版本不受支持'
          break
        default:
      }
      Message({
        message: error.message,
        type: 'error',
        duration: 5 * 1000
      })
    }
    return Promise.reject(error)
})

// 返回一个Promise  POST token
export function posToken (url, params) {
  return new Promise((resolve, reject) => {
    axios({
      method: 'post',
      url: url,
      data: params
    })   
    .then(response => {
        resolve(response.data)
      }, err => {
        reject(err)
      })
      .catch((error) => {
        reject(error)
      })
  })
}

// 返回一个Promise  POST 图片token
export function posTokenImg (url, params) {
  return new Promise((resolve, reject) => {
    axios({
      method: 'post',
      url: url,
      data: params,
      headers:{
        'Content-type': 'multipart/form-data',
     }
    })
      .then(response => {
        resolve(response.data)
      }, err => {
        reject(err)
      })
      .catch((error) => {
        reject(error)
      })
  })
}

// 返回一个Promise GET
export function geToken (url, params) {
  return new Promise((resolve, reject) => {
          axios.get(url, {
       params: params
        })
      .then(response => {
          resolve(response.data)
      }, err => {
        reject(err)
      })
      .catch((error) => {
        reject(error)
      })
  })
}

export default {
   //-------------------------获取url-------------------------------------
  'captcha': domain+'/apis/captcha', //  获取图片验证码
  'Avatar': domain, //  获取地址
  /*------------------------------------------首页--------------------------------------------*/
 
  Com (params) { // get 
    return geToken(domain + '/apis/com', params)
  }
}


Vue中使用axios调用多个接口跨域问题可以通过设置代理来解决。 1. 首先,在Vue项目根目录下找到config文件夹中的index.js文件。 2. 打开index.js文件,找到dev对象中的proxyTable选项。该选项允许我们配置代理。 3. 在proxyTable选项中添加以下代码: ```javascript proxyTable: { '/api1': { target: 'http://localhost:8000', changeOrigin: true, pathRewrite: { '^/api1': '/api1' } }, '/api2': { target: 'http://localhost:8001', changeOrigin: true, pathRewrite: { '^/api2': '/api2' } } } ``` 此处使用了两个接口作为示例,一个是/api1,另一个是/api2。target参数指定了代理的目标地址,需要根据实际情况进行修改。changeOrigin参数用于配置是否跨域,默认为false,需要设置为true。pathRewrite参数用于重写请求路径,可以根据需要进行修改。 4. 保存并关闭index.js文件。 5. 在Vue组件中使用axios调用接口时,只需要将接口的路径改为对应的代理路径,例如: ```javascript axios.get('/api1/users') .then(response => { // 处理接口1的响应 }) .catch(error => { // 处理接口1的错误 }); axios.get('/api2/posts') .then(response => { // 处理接口2的响应 }) .catch(error => { // 处理接口2的错误 }); ``` 以上代码中,/api1和/api2就是代理路径,可以直接在axios中使用。 通过以上步骤,我们成功地解决了在Vue中使用axios调用多个接口跨域问题。注意,在开发环境下使用代理是安全的,但在生产环境要将代理改为实际的服务器地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值