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' } } },
封装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 }) }
在组件中使用
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);
});
},
};
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>
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 }) }

浙公网安备 33010602011771号