当前位置: 首页 > article >正文

【HarmonyOS 4.0】网络请求 - axios

  1. axios 相当于鸿蒙应用项目的一个第三方库,鸿蒙应用项目使用ohpm管理(包括安装,卸载等)第三方库。除了axios,还有很多其他的第三方库可供开发者使用,所有的第三方库都收录在OpenHarmony三方库中心仓。
  2. 注意:需要配置网络访问权限

1. 安装 axios 库

1.1 查看 ohpm 安装目录
1.2 把 ohpm 安装目录添加到电脑Path环境变量中
1.3 安装 axios:ohpm i @ohos/axios

2. axios 快速入门

1.1 导入 axios:import axios from '@ohos/axios'
1.2 创建 axios 实例

const instance = axios.creat({
	baseURL: 'http://<ip>:<port>',
	timeout: 1000
})

1.3 发送 http 请求

// 获取手机验证码
Button('发送验证码')
	.onClick(() => {
		instance.get('/word/user/code', {params: {phone: this.phone}})
		 .then((response) => {
		 	this.code = response.data.data
		 })
		 .catch((error) => {
			console.info(error)
		 })
	}) 
// 登录
Button('登录')
	.onClick(() => {
	  instance.post('/word/user/login', {params: {phone: this.phone, code: this.code}})
		 .then((response) => {
		 	// response.data.data
		 })
		 .catch((error) => {
			console.info(error)
		 })
	})

1.4 获取请求结果,处理异步操作 async await 1

// 登录
Button('登录')
	.onClick(async () => {
	  let response = await instance.post('/word/user/login', {params: {phone: this.phone, code: this.code}})
	  console.info(response.data.data)
	})

// 登录
Button('登录')
	.onClick(async () => {
		try {
		  let response = await instance.post('/word/user/login', {params: {phone: this.phone, code: this.code}})
		  console.info(response.data.data)
		} catch (error){
		  console.info(error)
		}
	})

3. axios 拦截器

  1. axios 可以分别为请求和响应配置拦截器,请求拦截器可在请求发送前拦截,响应拦截器可以在 then() 和 catch() 方法执行前进行拦截。
    在这里插入图片描述
  2. 在拦截器中,开发者可以对请求的参数或者响应的结果做一些统一的处理,比如在请求拦截器中统一为所有请求增加 token 这一 Header,在响应拦截器中统一处理错误响应。

3.1 请求拦截器

instance.interceptors.request.use((config: InternalAxiosRequestConfig) => {
	return config
}, (error: AxiosError) => { // 比如手机客户端没有联网
    return Promise.reject(error)
})

3.2 响应拦截器

instance.interceptors.response.use((response: AxiosResponse) => {
   return response
}, (error: AxiosError) => {
   return Promise.reject(error)
})

4. 代码示例

entey/src/main/ets/http/Axios.ets文件写入

import axios, { InternalAxiosRequestConfig, AxiosError, AxiosResponse } from '@ohos/axios'
import { promptAction } from '@kit.ArkUI';

export const instance = axios.create({
  baseURL: 'http://xxx.xxx.xxx.xxx:xxxx',
  timeout: 1000,
});

instance.interceptors.request.use((config: InternalAxiosRequestConfig) => {
  const token = AppStorage.get('token')
  if (token) {
    config.headers['token'] = token
  }
  return config
}, (error: AxiosError) => {
  promptAction.showToast({ message: error.message })
  return Promise.reject(error)
});

instance.interceptors.response.use((response: AxiosResponse) => {
  if (response.data.code === 200) {
    return response
  } else {
    promptAction.showToast({ message: response.data.message })
    return Promise.reject(response.data.message)
  }
}, (error: AxiosError) => {
  promptAction.showToast({ message: error.message })
  return Promise.reject(error)
})

entey/src/main/ets/http/Api.ets文件写入

import { instance } from './Axios'

export function sendCode(phone: string) {
  return instance.get('/word/user/code', { params: { phone: phone } })
}

interface loginParams {
  phone: string,
  code: string
}

export function login(params: loginParams) {
  return instance.post('/word/user/login', params)
}

  1. await关键字:它会等待后面的异步操作执行完成,并解析异步操作的结果。
    加上 await 关键字之后,代码的返回值不再是一个 Promise对象,而是 Promise 当中所包含的这个异步操作的结果,也就是说,我们现在就可以直接接收这个结果。这个结果和 Promise 的 then() 方法的回调函数是一回事,操作成功的异步结果处理完了。
    使用 try {} catch (error) {},可以在 catch 中捕获异常结果,异步操作的异常处理完了。
    使用 async await 关键字能让异步的代码看起来更像同步的代码,可读性要更好,代码更好理解。 ↩︎


http://www.kler.cn/news/288421.html

相关文章:

  • Spring Boot实现发QQ邮件
  • Windows环境Chrome安装提示无可用更新问题解决【2024年版】
  • 【2024-2025源码+文档+调试讲解】微信小程序的城市公交查询系统
  • 前端js—实现字符串拼接
  • 驱动和固件的区别 — 简单介绍
  • 美国海外仓可以用哪家海外仓系统好?
  • JDS汽车检测主要内容
  • 科研论文必须要了解的25个学术网址
  • 2024数博会技术成果回顾 | KPaaS助力企业数智化转型
  • STM32——Flash闪存
  • 人脸表情识别/情绪识别的参考参数及相关开源产品汇总
  • LLM大模型教程:低使用门槛开源大模型服务框架Ollama
  • 提升效率!ArcGIS中创建脚本工具
  • 压缩大型语言模型 LLMs
  • 智能提醒助理系列-Nginx搭建
  • MySQL高级课程:索引设计与性能优化的最佳实践
  • 为初学者简单易懂地讲解Transformer的基础知识是什么?
  • vue,小程序,uni-app的生命周期
  • 【HarmonyOS 4.0】鸿蒙应用模型
  • [Algorithm][综合训练][kotori和n皇后][取金币][矩阵转置]详细讲解
  • 【JavaEE初阶】HTTP请求(Request)
  • 某付宝又火了!什么样的人能够申请网商贷?个人也能申请吗?
  • Java基于微信小程序的超市购物管理系统
  • golang中return和defer的执行顺序的一道题
  • 华为与联发科的专利博弈:技术较量还是市场重塑?
  • 【区块链 + 物联网】斐得坊智慧停车区块链 | FISCO BCOS应用案例
  • 【教程】2024.09.03 Qlib数据加载器以及数据集加载器 Alpha158 Aplha360详细的讲解,以及源码
  • JAVAEE初阶第二节——多线程基础(上)
  • golang关于slice map函数传参的小问题
  • 娱乐小项目-树莓派履带小车