鸿蒙开发 03 封装 @ohos/axios (最新深度封装)
import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, InternalAxiosRequestConfig } from "@ohos/axios";
// axios 请求配置
const config = {
baseURL:'http://localhost:8080',
// baseURL: '/api',
timeout: 1000
}
// 定义返回值类型
interface Result<T = any> {
code: number;
message: string;
data: T;
}
class Http {
// axios 实例
private instance: AxiosInstance;
// 构造函数初始化
constructor(config: AxiosRequestConfig) {
this.instance = axios.create(config);
//定义拦截器
this.interceptors();
}
private interceptors() {
// axios 发送请求之前的处理
this.instance.interceptors.request.use((config: InternalAxiosRequestConfig) => {
// 在请求头部携带token
// let token = ('token');
let token = '';
if (token) {
config.headers!['token'] = token;
// 把 token 放到 headers 里面
// ( as AxiosRequestHeaders).token = token;
}
console.log('' + config);
return config;
}, (error: any) => {
error.data = {};
error.data.msg = '服务器异常,请联系管理员!'
return error;
})
// axios 请求返回之后的处理
// 请求返回处理
this.instance.interceptors.response.use((res: AxiosResponse) => {
// ();
if (res.data.code != 200) {
console.log(res.data.msg || '服务器出错啦');
return Promise.reject(res.data.msg || '服务器出错啦');
} else {
return res.data;
}
}, (error) => {
console.log('进入错误!');
error.data = {};
if (error && error.response) {
switch (error.response.status) {
case 400:
error.data.msg = "错误请求";
console.log(error.data.msg);
break;
case 401:
error.data.msg = "未授权,请登录";
console.log(error.data.msg);
break;
case 403:
error.data.msg = "拒绝访问";
console.log(error.data.msg);
break;
case 404:
error.data.msg = "请求错误,未找到该资源";
console.log(error.data.msg);
break;
case 405:
error.data.msg = "请求方法未允许";
console.log(error.data.msg);
break;
case 408:
error.data.msg = "请求超时";
console.log(error.data.msg);
break;
case 500:
error.data.msg = "服务器端出错";
console.log(error.data.msg);
break;
case 501:
error.data.msg = "网络未实现";
console.log(error.data.msg);
break;
case 502:
error.data.msg = "网络错误";
console.log(error.data.msg);
break;
case 503:
error.data.msg = "服务不可用";
console.log(error.data.msg);
break;
case 504:
error.data.msg = "网络超时";
console.log(error.data.msg);
break;
case 505:
error.data.msg = "http版本不支持该请求";
console.log(error.data.msg);
break;
default:
error.data.msg = `连接错误${error.response.status}`;
console.log(error.data.msg);
}
} else {
error.data.msg = "连接到服务器失败";
console.log(error.data.msg)
}
return Promise.reject(error);
})
}
// GET方法
get<T = Result>(url: string, params?: object): Promise<T> {
return this.instance.get(url, { params });
}
// POST方法
post<T = Result>(url: string, data?: object): Promise<T> {
return this.instance.post(url, data);
}
// PUT方法
put<T = Result>(url: string, data?: object): Promise<T> {
return this.instance.put(url, data);
}
// DELETE方法
delete<T = Result>(url: string): Promise<T> {
return this.instance.delete(url);
}
}
export default new Http(config);