axios拦截器
<p>src/axios/axios.js</p>
<pre><code>import axios from 'axios'
import config from '@/config'
const baseUrl = process.env.NODE_ENV ==='development'?config.baseUrl.dev:config.baseUrl.pro
class HttpRequest {
constructor(baseUrl){
this.baseURL = baseUrl
this.queue = {}
}
getInsideConfig(){
const config = {
baseURL:this.baseUrl,
header:{
//
},
}
return config
}
// 拦截请求
interceptors(instance,url){
instance.interceptors.request.use(config=>{
//处理config
console.log('拦截和处理请求')
console.log(config)
return config
})
instance.interceptors.response.use(res=>{
//处理响应
console.log('处理响应')
console.log(res)
return res
},error=>{
// 请求出问题,处理问题
console.log('网络出错了')
console.log(error)
})
}
request(options){
const instance = axios.create()// 创造实例对象
options = Object.assign(this.getInsideConfig(),options)
this.interceptors(instance,options.url)
return instance(options)
}
}
const axiosObj = new HttpRequest(baseUrl)
export default axiosObj</code></pre>
<p>src/axios/data.js</p>
<pre><code>import axios from '@/axios/axios'
export const getBannerData = ()=>{
return axios.request({
url:'/api/cplusplus/get_default_code',
method:'post'
})
}</code></pre>
<p>src/config/index.js</p>
<pre><code>export default {
title:'axiosinterceptor',
baseUrl:{
dev:'/api/',
pro:'http://127.0.0.1:3000'
}
}</code></pre>
<p>config/index.js <strong>OR</strong> vue.config.js</p>
<pre><code>...
proxyTable: {
'/api': {
target: 'http://cplus.shanshancode.com',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
}
},
...</code></pre>