HarmonyOS鸿蒙Next中如何封装Axios?然后token如何存储本地并调取
HarmonyOS鸿蒙Next中如何封装Axios?然后token如何存储本地并调取
我在一个页面上调取成功了,但是没有封装,还用的固定的临时token,根本不会封装Axios和存储token,有没有好心人帮一下,
2 回复
在HarmonyOS Next中封装网络请求可使用@ohos.net.http
模块替代Axios。封装HTTP客户端需创建单例类,配置baseURL、超时等参数,提供get/post等方法。token存储使用@ohos.data.preferences
持久化键值对存储,通过Preferences实例的put/get方法存取。请求拦截可在封装层实现,自动从Preferences读取token添加到header。具体代码需实现:1) HTTP请求封装类 2) Preferences工具类 3) token自动管理逻辑。注意Next版本API可能有差异,需参考最新文档实现。
更多关于HarmonyOS鸿蒙Next中如何封装Axios?然后token如何存储本地并调取的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中封装Axios并实现token存储调取的方案如下:
- 封装Axios基础请求:
// http.ts
import axios from 'axios';
import preferences from '@ohos.data.preferences';
const instance = axios.create({
baseURL: 'your_api_base_url',
timeout: 10000
});
// 请求拦截器
instance.interceptors.request.use(async (config) => {
const token = await getToken();
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
// 响应拦截器
instance.interceptors.response.use(
(response) => response.data,
(error) => Promise.reject(error)
);
export default instance;
- Token存储与获取:
// storage.ts
import preferences from '@ohos.data.preferences';
const PREF_NAME = 'my_app_preferences';
const TOKEN_KEY = 'auth_token';
// 存储token
export async function saveToken(token: string): Promise<void> {
try {
const pref = await preferences.getPreferences(globalThis.context, PREF_NAME);
await pref.put(TOKEN_KEY, token);
await pref.flush();
} catch (err) {
console.error('Failed to save token:', err);
}
}
// 获取token
export async function getToken(): Promise<string | null> {
try {
const pref = await preferences.getPreferences(globalThis.context, PREF_NAME);
return await pref.get(TOKEN_KEY, null);
} catch (err) {
console.error('Failed to get token:', err);
return null;
}
}
- 使用示例:
import http from './http';
import { saveToken } from './storage';
// 登录示例
async function login(username: string, password: string) {
try {
const res = await http.post('/login', { username, password });
await saveToken(res.token);
return res;
} catch (err) {
throw err;
}
}
// 获取数据示例
async function fetchData() {
try {
return await http.get('/data');
} catch (err) {
throw err;
}
}
这个方案实现了:
- Axios实例的封装,包含请求/响应拦截器
- 使用HarmonyOS的preferences持久化存储token
- 自动在请求头中添加token
- 提供了基础的登录和数据获取示例
注意:实际使用时需要替换baseURL和调整错误处理逻辑。