下面给你整理一份 《HarmonyOS Axios 数据请求封装与配置方法》,适合在 HarmonyOS 5/6 前端项目中进行统一网络请求管理,包含封装思路、示例代码和最佳实践。
HarmonyOS Axios 数据请求封装与配置方法
在 HarmonyOS 的前端开发中(使用 ArkUI / JavaScript 或 TypeScript),通常需要访问后台 API。axios 是最常用的 HTTP 请求库,配合封装可统一处理:
- 请求拦截器(统一加 token、参数处理)
- 响应拦截器(统一处理错误、状态码)
- 超时、baseURL 配置
- 多接口统一管理
一、安装 Axios
如果你的 HarmonyOS JS/TS 项目使用 npm 管理依赖:
npm install axios
在 DevEco Studio 项目中,也可以通过 JS 模块依赖 导入。
二、创建 Axios 实例
统一创建一个 axios 实例,方便全局配置:
// request.js
import axios from 'axios';
// 创建 axios 实例
const service = axios.create({
baseURL: 'https://api.example.com', // 基础路径
timeout: 10000, // 请求超时 10 秒
headers: {
'Content-Type': 'application/json'
}
});
// 请求拦截器
service.interceptors.request.use(
config => {
// 可在此统一加 token
const token = globalThis.token || '';
if (token) {
config.headers['Authorization'] = `Bearer ${token}`;
}
return config;
},
error => {
return Promise.reject(error);
}
);
// 响应拦截器
service.interceptors.response.use(
response => {
// 可统一处理响应数据
if (response.data.code !== 200) {
// 根据 code 异常处理
console.error('接口异常', response.data.message);
return Promise.reject(response.data);
}
return response.data; // 直接返回接口 data
},
error => {
console.error('请求失败', error.message);
return Promise.reject(error);
}
);
export default service;
三、封装请求方法
统一封装 GET / POST / PUT / DELETE 方法:
// api.js
import request from './request.js';
export const getUserInfo = (id) => {
return request.get(`/user/${id}`);
};
export const login = (params) => {
return request.post('/auth/login', params);
};
export const updateProfile = (id, params) => {
return request.put(`/user/${id}`, params);
};
export const deleteUser = (id) => {
return request.delete(`/user/${id}`);
};
优点:
- 所有请求通过统一
request.js实例 - 拦截器可处理 token、全局错误
- API 调用简单,代码可读性高
四、在 HarmonyOS 页面中调用
假设你的 AbilitySlice 页面:
import { login, getUserInfo } from '../api/api.js';
export default class LoginSlice extends AbilitySlice {
onStart() {
super.onStart();
// 登录示例
login({ username: 'test', password: '123456' })
.then(res => {
console.log('登录成功', res);
})
.catch(err => {
console.error('登录失败', err);
});
// 获取用户信息
getUserInfo(123)
.then(res => console.log('用户信息', res))
.catch(err => console.error(err));
}
}
特点:
- 异步调用通过 Promise 或 async/await
- 业务层无需关注 axios 具体实现
- 拦截器统一处理 token 和错误
五、可选增强功能
- 统一处理 Loading
- 请求开始:显示 loading
- 请求结束:隐藏 loading
service.interceptors.request.use(config => { showLoading(); return config; }); service.interceptors.response.use(response => { hideLoading(); return response; }, error => { hideLoading(); return Promise.reject(error); }); - 全局错误提示
- 可用
toast或弹窗提示接口错误信息
- 可用
- 请求重试
- 对于网络错误或超时可自动重试
- 可通过 axios-retry 插件或自定义拦截器实现
- 跨域 / 本地代理
- HarmonyOS JS 前端开发可通过 webpack 或 vite 配置 proxy
六、示例 async/await 使用
async function fetchUser() {
try {
const data = await getUserInfo(123);
console.log('用户信息', data);
} catch (err) {
console.error('获取用户信息失败', err);
}
}
- async/await 语法更简洁,适合业务逻辑复杂的页面
七、总结
- 在 HarmonyOS 中封装 Axios 是前端项目的最佳实践
- 拦截器 + 实例化 + API 封装 = 高可维护网络请求体系
- 可扩展功能:Loading、全局提示、重试、token 刷新
- 异步调用:Promise 或 async/await
- 业务层只调用封装好的 API,保持整洁