HarmonyOS鸿蒙Next中ohos_axios如何设置多套axios.defaults?
HarmonyOS鸿蒙Next中ohos_axios如何设置多套axios.defaults? 项目中有多个baseURL,此时我如何设置不同的baseURL和不同的header,我如何配置多套axios.defaults,从而调用不同的axios?
你循环生成就可以了
```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
怎么设置多套baseURL
和header
,
拦截器啊,
基本信息
我100个接口是域名一,50个接口是域名二,我是想配置两套axios.defaults。这种两个域名的需求用拦截器不是最优解。
我是在axios上层封装了一层。URL和Parma是传入的。然后做了几套模块,在业务层直接选择模版。
我看axios.defaults挺好用的,但是不能设置多套,没办法的话只能封装axios了,
在HarmonyOS鸿蒙Next中,ohos_axios
是一个用于网络请求的库,类似于前端的 axios
。要设置多套 axios.defaults
,可以通过创建多个 axios
实例来实现。每个实例可以独立配置其默认值,例如 baseURL
、headers
、timeout
等。
以下是设置多套 axios.defaults
的步骤:
-
创建多个
axios
实例: 使用axios.create()
方法创建多个实例,每个实例可以拥有独立的默认配置。 -
配置每个实例的默认值: 为每个实例设置不同的默认值,例如
baseURL
、headers
、timeout
等。 -
使用不同的实例进行请求: 在需要发送请求时,使用配置好的不同实例。
示例代码如下:
// 引入 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 接口的需求。每个实例的配置相互独立,互不影响。