Vue二次封装axios为插件使用详解

2020-06-13 10:15:02易采站长站整理

if (config.method.toLocaleLowerCase() === 'post'
|| config.method.toLocaleLowerCase() === 'put'
|| config.method.toLocaleLowerCase() === 'delete') {

config.data = qs.stringify(config.data)
}
return config
},
error => {
// 请求错误时做些事(接口错误、超时等)
// Tip: 4
// 关闭loadding
console.log('request:', error)

// 1.判断请求超时
if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
console.log('根据你设置的timeout/真的请求超时 判断请求现在超时了,你可以在这里加入超时的处理方案')
// return service.request(originalRequest);//例如再重复请求一次
}
// 2.需要重定向到错误页面
const errorInfo = error.response
console.log(errorInfo)
if (errorInfo) {
// error =errorInfo.data//页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.reject
const errorStatus = errorInfo.status; // 404 403 500 ... 等
router.push({
path: `/error/${errorStatus}`
})
}
return Promise.reject(error) // 在调用的那边可以拿到(catch)你想返回的错误信息
}
)

// response 拦截器
instance.interceptors.response.use(
response => {
let data;
// IE9时response.data是undefined,因此需要使用response.request.responseText(Stringify后的字符串)
if(response.data == undefined){
data = response.request.responseText
} else{
data = response.data
}
// 根据返回的code值来做不同的处理(和后端约定)
switch (data.code) {
case '':
break;
default:
}
// 若不是正确的返回code,且已经登录,就抛出错误
// const err = new Error(data.description)

// err.data = data
// err.response = response

// throw err
return data
},
err => {
if (err && err.response) {
switch (err.response.status) {
case 400:
err.message = '请求错误'
break

case 401:
err.message = '未授权,请登录'
break

case 403:
err.message = '拒绝访问'
break

case 404:
err.message = `请求地址出错: ${err.response.config.url}`
break

case 408:
err.message = '请求超时'
break

case 500:
err.message = '服务器内部错误'
break

case 501:
err.message = '服务未实现'
break