文章16 | 阅读 6598 | 点赞0
import { Injectable } from '@angular/core';
import axios from 'axios';
import Qs from 'qs';
axios.defaults.timeout = 5000;
import { environment } from '../../environments/environment';
console.log(environment.baseURL);
axios.defaults.baseURL = environment.baseURL; //填写域名
//http request 拦截器 客户端给服务端 的数据
axios.interceptors.request.use(
config => {
config.headers.common = {
'X-API-TOKEN': localStorage.getItem('token'),
'version': '1.0',
'Content-Type': 'application/json;charset=UTF-8'
}
if (config.data && config.data.form) {
//转化成formData格式
// transformRequest只能用在 PUT, POST, PATCH 这几个请求方法
config.transformRequest = [function (data) {
//方式一
delete data.form;
// var ret = '';
// for (let it in data) {
// ret += it+'=' +data[it] + '&';
// }
// return ret.substring(0,ret.length-1);
//方式二:
var test2 = Qs.stringify(data);
return test2;
}]
}
return config;
},
error => {
return Promise.reject();
}
);
//响应拦截器即异常处理 - -- 服务给客户端的数据进行处理
axios.interceptors.response.use(response => {
if (response.status === 200) {
return Promise.resolve(response);
} else {
return Promise.reject(response);
}
// return response
}, err => {
if (err && err.response) {
var errorMsg = '';
switch (err.response.status) {
case 400:
console.log('错误请求')
errorMsg = '错误请求';
break;
case 401:
console.log('未授权,请重新登录');
errorMsg = '未授权,请重新登录';
break;
case 403:
console.log('拒绝访问')
errorMsg = '拒绝访问';
break;
case 404:
console.log('请求错误,未找到该资源')
errorMsg = '请求错误,未找到该资源';
break;
case 405:
console.log('请求方法未允许')
errorMsg = '请求方法未允许';
break;
case 408:
console.log('请求超时')
errorMsg = '请求超时';
break;
case 500:
console.log('服务器端出错')
errorMsg = '服务器端出错';
break;
case 501:
console.log('网络未实现')
errorMsg = '请求方法未允许';
break;
case 502:
console.log('网络错误')
errorMsg = '网络错误';
break;
case 503:
console.log('服务不可用')
errorMsg = '服务不可用';
break;
case 504:
console.log('网络超时')
errorMsg = '网络超时';
break;
case 505:
console.log('http版本不支持该请求')
errorMsg = 'http版本不支持该请求';
break;
default:
console.log(`连接错误${err.response.status}`)
}
alert(errorMsg);
} else {
console.log('连接到服务器失败')
}
return Promise.resolve(err.response)
})
@Injectable({
providedIn: 'root'
})
export class AxiosService {
constructor() { }
// 包装一个 直接利用axios自身是一个Promise对象的思想封装
postFun(url, params) {
return axios.post(url, params)
.then(response => {
if (response.status == 200) {
return Promise.resolve(response.data);
//注意必须要有return,相当于new Promise里的resolve,告诉接口已经获取数据
}
})
.catch(err => {
})
}
getFun(url, params = {}) {
return new Promise((resolve, reject) => {
axios.get(url, {
params: params
})
.then(response => {
resolve(response.data);
})
})
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://codeboy.blog.csdn.net/article/details/107851418
内容来源于网络,如有侵权,请联系作者删除!