axios实现跨域及突破host和referer的限制;axios 拦截器的使用

webpack中设置代理

  proxyTable: {
      //跨域代理
      'api':{
        target:'https://c.y.qq.com', // 需要代理的地址
         secure: false, // 如果是https接口,需要配置这个参数,
         changeOrigin: true, // 是否跨域
         pathRewrite:{
            '^/api': ''
         }
      },
      '/pc': { // 代理url关键字
        target: 'https://u.y.qq.com', // 需要代理的地址
        secure: false, // 如果是https接口,需要配置这个参数
        changeOrigin: true, // 是否跨域
        pathRewrite: {
          '^/pc': ''
        },
        // 突破host和origin的限制
        headers: {
          referer: 'https://y.qq.com/',
          origin: 'https://y.qq.com'
        }
      }
    },
View Code

封装axios请求方法

import axios from 'axios';
//请求公用数据
 const commonParams = {
  g_tk: 5381,
  notice: 0,
  format: 'jsonp',
  inCharset: 'utf-8',
  outCharset: 'utf-8',
}


//获取歌曲列表
export function songList(){
  const url = '/pc/cgi-bin/musicu.fcg'
   const data = Object.assign({}, commonParams, {
    loginUin: 0,
    hostUin: 0,
    platform: 'yqq.json',
    needNewCode: 0,
    data: JSON.stringify({
      'comm': { 'ct': 24 },
      'playlist': {
        'method': 'get_playlist_by_category',
        'param': {
          'id': 3317,
          'curPage': 1,
          'size': 40,
          'order': 5,
          'titleid': 3317
        },
        'module': 'playlist.PlayListPlazaServer'
      }
    }),
    ...commonParams
  })
  return axios({
    method: 'get',
    url: url,
    params: data
  })
}
View Code

在组件中使用

import { getRecommend,songList} from "@/api/recommend.js";
export default {
  name: "Recommend",
  created() {
    songList()
      .then((res) => {
        console.log(res,2222);
      })
      .catch((err) => {
        console.log(err,33333);
      });
  },
};
View Code

 

 

axios 拦截器的使用

<template>
  <div class="hello">
    <h1>axios 拦截器的使用</h1>
    <button @click="sendAxios">发送axios</button>
    <h2 v-if='isLoadding'>isLoadding</h2>
    <h2 v-else>{{msg}}</h2>

    {{isLoadding}}
  </div>
</template>

<script>
  import axios from 'axios';
  export default {
    name: 'HelloWorld',
    data() {
      return {
        msg: '',
        isLoadding:false
      }
    },
    created() {
      const me=this;
      console.log('created')
      // 配置拦截器
      axios.interceptors.request.use(function (config) {
        me.isLoadding = true;
        return config
      }, function (error) {
        console.log('请求拦截器错误', error)
        return Promise.reject(error)
      })

      //axios 响应拦截器
      axios.interceptors.response.use(function (response) {
        me.isLoadding = false;
        me.msg="请求成功";
        return response
      }, function (error) {
        console.log('响应拦截器错误', error)
        return Promise.reject(error)
      })
    },
    mounted() {
      console.log('mounted');
    },
    methods:{
      sendAxios(){
        axios.post('http://localhost:3000/api/login')
      }
    }
  }

</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
View Code

 

 

import axios from 'axios';
let msg=''
//响应拦截器
axios.interceptors.response.use(function(response){
  msg='success';
  return response;
},function(error){
  msg='响应拦截器错误'
  return;
})

//请求拦截器
axios.interceptors.request.use(function (config) {
  let token='token';
  //请求头携带token
  config.headers.Authorization = token
  return config;
}, function (error) {
  return Promise.reject(error);
});


let base='';
//传送json 格式的post 请求
export const postRequest=(url,params)=>{
  return axios({
    method:'POST',
    url:`${base}${url}`,
    data:params
  })
}
View Code

 

posted @ 2021-06-08 22:31  还有什么值得拥有  阅读(1260)  评论(0编辑  收藏  举报