HarmonyOS鸿蒙Next中ohos_axios如何设置多套axios.defaults?

HarmonyOS鸿蒙Next中ohos_axios如何设置多套axios.defaults? 项目中有多个baseURL,此时我如何设置不同的baseURL和不同的header,我如何配置多套axios.defaults,从而调用不同的axios?

12 回复
你循环生成就可以了

```javascript
let APIS = {
  api1: 'https://api1.com',
  api2: 'https://api2.com', 
} 

let requests = {}

for (let key in APIS) {
  let instance = axios.create({
    baseURL: APIS[key],
  })

  if (key === 'api1') {
    instance.interceptors.request.use(api1ReqInterceptor)
    instance.interceptors.response.use(api1ResInterceptor)
  } else if (key === 'api2') {
    instance.interceptors.request.use(api2ReqInterceptor)
    instance.interceptors.response.use(api2ResInterceptor)
  }

  requests['$' + key] = instance
}

更多关于HarmonyOS鸿蒙Next中ohos_axios如何设置多套axios.defaults?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


import systemDateTime from ‘@ohos.systemDateTime’ import axios, { AxiosInstance } from ‘@ohos/axios’ import deviceInfo from ‘@ohos.deviceInfo’ import bundleManager from ‘@ohos.bundle.bundleManager’; import CryptoJS from ‘@ohos/crypto-js’

export class SupportAxios {

private static instance: AxiosInstance

static async request(): Promise<AxiosInstance> {

if (!SupportAxios.instance) {
  SupportAxios.instance = axios.create()
}

// 请求函数默认值
SupportAxios.instance.defaults.baseURL = '[https://xxxx](https://xxxx)'
SupportAxios.instance.defaults.method = 'post'

// 获取版本信息
let bundleData = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT)

// header需要的数据
let time = await systemDateTime.getCurrentTime()
let seconds = time.toString().substr(0, 10)
let staffNo = ""

// header赋值
SupportAxios.instance.defaults.headers['accept'] = 'application/json'
SupportAxios.instance.defaults.headers['content-type'] = 'application/json'
SupportAxios.instance.defaults.headers['platform'] = deviceInfo.osFullName
SupportAxios.instance.defaults.headers['appVersion'] = bundleData.versionName
SupportAxios.instance.defaults.headers['clientVer'] = bundleData.versionName
SupportAxios.instance.defaults.headers['staffno'] = staffNo
SupportAxios.instance.defaults.headers['companycode'] = '0755'
SupportAxios.instance.defaults.headers['channel'] = 'aplusmax'
SupportAxios.instance.defaults.headers['brand'] = 'HUAWEI'
SupportAxios.instance.defaults.headers['model'] = deviceInfo.productModel
SupportAxios.instance.defaults.headers['udid'] = deviceInfo.udid
SupportAxios.instance.defaults.headers['token'] = ''
SupportAxios.instance.defaults.headers['projectkeyid'] = 'AB2D27E1-36F1-4785-A771-8A0ABE96C0AC'
SupportAxios.instance.defaults.headers['number'] = seconds
SupportAxios.instance.defaults.headers['sign'] = CryptoJS.MD5("xxxxx" + seconds + staffNo)

return SupportAxios.instance

}

// 登录接口 static login: string = ‘system/account/multi-login’ }

请求登录接口

SupportAxios.request().then(req => {
  req<LoginResp, AxiosResponse<LoginResp>, LoginReq>({
    url: SupportAxios.login,
    data: loginReq,
  }).then((res: AxiosResponse<LoginResp>) => {
    // 打印请求数据
    var str = JSON.stringify(res.data)

    print(str)

    // 关闭加载动画
    this.dialogController.close()

    // 判断登录接口
    if (res.data.flag === true && res.data.status === 200) {
      // 保存登录数据
      PreferencesUtil.saveLoginData(str)

      // 清除所有历史页面,仅保留堆栈顶部的当前页面。
      router.clear()
      // 将当前页面替换为应用程序中的另一个页面。当前页在替换后被销毁。
      router.replaceUrl({ url: 'pages/MainPage' });
      promptAction.showToast({ message: '登录成功'});
    }else {
      promptAction.showToast({ message: res.data.message});
    }
  }).catch((err: AxiosError) => {
    console.log(err.message)
  })
})
官方代码没有文档也没有注释,所以不会用,看到你发的 `axios.create` 就知道怎么写了,

自己封装一个request方法,加一些自定义参数

希望在axios基础上实现网络请求,但是不知道axios.defaults怎么设置多套baseURLheader

拦截器啊,

基本信息

我100个接口是域名一,50个接口是域名二,我是想配置两套axios.defaults。这种两个域名的需求用拦截器不是最优解。

我是在axios上层封装了一层。URL和Parma是传入的。然后做了几套模块,在业务层直接选择模版。

我看axios.defaults挺好用的,但是不能设置多套,没办法的话只能封装axios了,

在HarmonyOS鸿蒙Next中,ohos_axios 是一个用于网络请求的库,类似于前端的 axios。要设置多套 axios.defaults,可以通过创建多个 axios 实例来实现。每个实例可以独立配置其默认值,例如 baseURLheaderstimeout 等。

以下是设置多套 axios.defaults 的步骤:

  1. 创建多个 axios 实例: 使用 axios.create() 方法创建多个实例,每个实例可以拥有独立的默认配置。

  2. 配置每个实例的默认值: 为每个实例设置不同的默认值,例如 baseURLheaderstimeout 等。

  3. 使用不同的实例进行请求: 在需要发送请求时,使用配置好的不同实例。

示例代码如下:

// 引入 ohos_axios
import axios from 'ohos_axios';

// 创建第一个实例并配置默认值
const instance1 = axios.create({
  baseURL: 'https://api.example.com/v1',
  timeout: 5000,
  headers: {'X-Custom-Header': 'foobar'}
});

// 创建第二个实例并配置默认值
const instance2 = axios.create({
  baseURL: 'https://api.anotherexample.com/v2',
  timeout: 10000,
  headers: {'X-Another-Header': 'barbaz'}
});

// 使用第一个实例发送请求
instance1.get('/users')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });

// 使用第二个实例发送请求
instance2.post('/data', { key: 'value' })
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });

通过这种方式,你可以在同一个应用中管理多套 axios.defaults,以满足不同 API 接口的需求。每个实例的配置相互独立,互不影响。

在HarmonyOS鸿蒙Next中,ohos_axios默认不支持直接设置多套axios.defaults。但可以通过创建多个axios实例来实现类似功能。例如:

import axios from 'ohos_axios';

const instance1 = axios.create({
  baseURL: 'https://api1.example.com',
  timeout: 5000
});

const instance2 = axios.create({
  baseURL: 'https://api2.example.com',
  timeout: 3000
});

instance1.get('/data');
instance2.post('/submit', { data: 'example' });

通过这种方式,可以为不同的API配置独立的默认设置。

回到顶部