封装axios模块

这篇博客详细介绍了如何使用axios库创建一个HTTP客户端实例,并封装了一个通用的请求方法,支持GET、POST、PUT、DELETE等多种HTTP方法。通过设置基础URL、超时时间和参数,简化了API调用的流程,提高了代码的复用性和可维护性。
import axios from 'axios'

//创建axios实例
const axiosObj = axios.create({
    baseURL: 'http://api.web1024.cn',
    timeout: 8000,
    params: {
        key: 'gxn759'
    }
})

/**
 * 用于发送请求的通用方法
 * @param {*} options 配置信息,method请求方法,params参数,path路由
 * @returns
 */
async function http({method = 'get',params,path}){

    let result

    if(method === 'get' || method === 'delete'){
        await axiosObj[method](path,{
            params
        }).then(res=>{
            result = res.data
        },err=>{
            result = err
        })
    }else if(method === 'post' || method === 'put' || method === 'patch'){
        await axiosObj[method](path,params).then(res=>{
            result = res.data
        },err=>{
            result = err
        })
    }

    return result

}

export default http

<think>好的,我现在需要帮用户解决在鸿蒙5.0中封装Axios公共模块并实现动态存储Headers密钥的问题。首先,我需要确认用户的具体需求。他们想要一个公共模块,可能用于多个请求的复用,同时Headers中的密钥需要动态存储,这可能意味着密钥可能会变化,或者需要从某个地方动态获取,比如本地存储或加密服务。 接下来,我得回忆一下鸿蒙5.0的开发环境。鸿蒙使用的是ArkTS语言,类似于TypeScript,所以代码结构应该和TS类似。Axios在鸿蒙中可能是指http模块,或者是用户自己封装的第三方库?需要确认鸿蒙5.0中是否有内置的HTTP客户端,或者是否使用社区提供的Axios适配。假设用户指的是使用ohos.net.http模块,可能需要基于这个进行封装。 然后,动态存储Headers密钥。动态存储可能意味着每次请求前获取最新的Headers,比如从Preferences或加密模块中读取。密钥可能需要加密存储,所以需要考虑如何安全地存储和读取。比如,使用Preferences存储加密后的密钥,每次请求时解密并使用。 接下来,我需要设计封装结构。公共模块应该包括创建实例、拦截器、动态添加Headers等部分。可能需要一个类,比如HttpClient,包含get、post等方法,并在构造函数中设置拦截器。拦截器可以在请求发送前动态修改Headers,比如从Preferences中获取token并添加到Headers中。然后考虑示例代码的结构。首先导入必要的模块,比如http、Preferences等。然后定义HttpClient类,在构造函数中创建http实例,设置拦截器。拦截器中使用Preferences获取存储的token,并添加到请求头中。然后实现get、post等方法,最后导出实例。还要考虑异常处理,比如获取Preferences数据时的异步操作,需要使用async/await。此外,密钥可能不存在的情况,需要处理错误或给出提示。 关于存储密钥,用户可能需要使用鸿蒙的安全机制,比如@ohos.security.keystore,但如果是简单的示例,可能先用Preferences存储。用户如果要求更高安全性,可能需要使用更高级的加密方式,但示例代码可能先展示基础实现。然后,检查代码是否符合ArkTS语法,比如类的方法、箭头函数的使用,以及模块导入是否正确。例如,ohos.net.http中的HttpRequest是否正确使用,Preferences的接口是否异步处理。最后,生成相关问题,考虑用户可能的后续问题,比如如何加密存储、如何刷新令牌、如何处理多个拦截器等。确保问题与封装Axios模块相关,并引导用户深入优化或解决其他问题。</think>在鸿蒙5.0(HarmonyOS 5.0)中使用ArkTS封装Axios公共模块并实现动态存储Headers密钥,可以参考以下实现方案: ### 一、基础封装实现 ```typescript // http.ts import http from '@ohos.net.http'; import preferences from '@ohos.data.preferences'; // 创建HTTP单例 class HttpClient { private instance: http.HttpRequest; private tokenKey = "auth_token"; constructor() { this.instance = http.createHttp(); // 请求拦截器 this.instance.on('headerReceive', async () => { const token = await this.getDynamicToken(); return { ...this.getBaseHeaders(), Authorization: `Bearer ${token}` }; }); } // 获取动态token private async getDynamicToken(): Promise<string> { try { const prefs = await preferences.getPreferences(this.context, 'secret_store'); return await prefs.get(this.tokenKey, ''); } catch (e) { console.error("Token获取失败:" + e); return ''; } } // 基础请求头 private getBaseHeaders() { return { 'Content-Type': 'application/json', 'OS-Version': 'HarmonyOS 5.0' }; } // 公共请求方法 public async request(config: http.HttpRequestOptions) { return this.instance.request(config); } // 存储动态密钥 public async storeSecretKey(key: string) { const prefs = await preferences.getPreferences(this.context, 'secret_store'); await prefs.put(this.tokenKey, key); await prefs.flush(); } } export default new HttpClient(); ``` ### 二、使用示例 ```typescript // api.ts import httpClient from './http'; // 初始化时存储密钥 httpClient.storeSecretKey("YOUR_API_KEY"); // 发起请求 async function fetchData() { try { const response = await httpClient.request({ method: http.RequestMethod.GET, url: 'https://api.example.com/data', extraData: {} }); console.log(JSON.stringify(response.result)); } catch (e) { console.error("请求失败:" + e); } } ``` ### 三、关键特性说明 1. **动态凭证管理**:通过`preferences`模块实现密钥的安全存储[^1],支持运行时更新 2. **请求拦截器**:通过`headerReceive`事件实现请求头动态注入 3. **统一错误处理**:通过try-catch块包裹核心逻辑防止内存泄漏 4. **环境标识**:在基础请求头中自动携带OS版本信息
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值