uni-app 封装api请求

news2024/11/23 11:42:29

前端封装api请求

前端封装 API 请求可以提高代码的可维护性和重用性,同时使得 API 调用更加简洁和易用。

下面是一种常见的前端封装 API 请求的方式:

  1. 创建一个 API 封装模块或类:可以使用 JavaScript 或 TypeScript 创建一个独立的模块或类来封装 API 请求。这个模块或类可以包含一些常用的方法,例如 getpost 等,用于发送不同类型的请求。

  2. 配置基本信息:在封装模块中,设置 API 的基本信息,例如 API 的根地址、请求头等。可以定义一些默认配置,也可以允许开发者在调用时传入自定义配置。

  3. 实现请求方法:根据需要,实现不同的请求方法,例如 getpostputdelete 等。这些方法通常接收参数(例如 URL、数据、请求头等),并返回一个 Promise 对象,以便在异步请求完成后获取数据或处理错误。

  4. 处理请求和响应拦截:在请求发送前,可以对请求进行一些预处理,例如添加统一的请求头、身份验证等。在响应返回后,也可以对响应进行拦截和处理,例如判断状态码、处理错误信息等。

  5. 错误处理:在封装的 API 模块中,可以统一处理请求错误。例如,对于网络错误或服务器返回的错误信息,可以进行统一的处理,并根据需要进行提示或记录操作。

  6. 使用封装的 API 模块:在项目中使用封装的 API 模块进行 API 请求。通过调用封装模块中的方法,传入请求所需的参数,即可发送请求并获取响应数据。

这种方式的好处是,在项目中可以复用封装好的 API 请求逻辑,减少代码的冗余,并且使得 API 调用的代码更加清晰和易读。

此外,对于底层的网络请求库,也可以根据需要进行切换和替换,而不需要修改大量的业务代码。

更多详细内容,请微信搜索“前端爱好者戳我 查看

uni-app 封装api请求

在uni-app中封装API请求可以按照以下步骤进行:

  • 创建一个utils文件夹,并在其中创建一个api.js文件,用于存放API请求相关的代码。

  • api.js文件中,引入uni.request方法用于发送请求。示例代码如下:

export function request(url, method, data) {
  return new Promise((resolve, reject) => {
    uni.request({
      url: url,
      method: method,
      data: data,
      success: (res) => {
        resolve(res.data);
      },
      fail: (err) => {
        reject(err);
      }
    });
  });
}

这里使用了Promise对象来处理异步请求,方便后续的使用和处理。

  • api.js文件中,定义具体的API请求函数。示例代码如下:
import { request } from './utils/api';

export function login(username, password) {
  const url = 'https://api.example.com/login';
  const method = 'POST';
  const data = {
    username: username,
    password: password
  };
  return request(url, method, data);
}

export function getUserInfo(userId) {
  const url = `https://api.example.com/users/${userId}`;
  const method = 'GET';
  return request(url, method);
}

以上示例代码中包括了登录和获取用户信息两个API请求函数。根据具体的需求,你可以进行修改或添加其他的API请求函数。

  • 在需要使用API的页面或组件中引入并调用定义的API请求函数即可。示例代码如下:
import { login, getUserInfo } from './utils/api';

login('example', 'password').then((res) => {
  console.log('登录成功', res);
}).catch((err) => {
  console.error('登录失败', err);
});

getUserInfo(123).then((res) => {
  console.log('获取用户信息成功', res);
}).catch((err) => {
  console.error('获取用户信息失败', err);
});

以上示例代码展示了如何使用封装的API请求函数来进行登录和获取用户信息的操作。根据具体需求,你可以在相应的页面或组件中调用相关API请求函数。

通过以上步骤,你就可以在uni-app中封装API请求,使代码结构更加清晰和可维护。记得根据实际情况进行适当的错误处理和数据处理。

uni-app封装api请求改进

// @/utils/request.js
// #ifdef MP-WEIXIN
const baseURL = "https://www.bradenhan.tech"
// #endif 
// #ifdef H5
const baseURL = ""
// #endif

const timeout = 5000

// 封装api请求
const request = function(option){ 
	// 获取用户传入的url
	var url = baseURL + option.url; 
	 
	// 添加提请求头
	var  header = option.header||{}
	if(!!option.needToken){
		// 添加token 
		header.Authorization =  'Bearer ' +  uni.getStorageSync('token');  
	}
	header.source=1;
	header.channel="h5";
	
	// 加载提示
	var loading = option.loading;
	// 如果有loading就显示loading
	if(loading){
		uni.showLoading(loading)
	}
  
  // 返回一个promise
	return new Promise((resolve,reject)=>{  
		// 发起一个request请求
		uni.request({
			url, //请求url
			method:option.method||"GET", //请求方法
			header, //请求头
			timeout,
			data:option.data||option.params, //请求数据
			success(res){
				// 成功返回结果
				if(res.statusCode===200){
					resolve(res.data)
					// 如果是101 没有权限
					if(res.data.code==101){
						uni.showToast({
							title: res.data.msg,
							icon:'none'
						})
						uni.redirectTo({
							url: '/pages/login/index',
						})
					}
					if(res.data.code!=200&&res.data.code!=0){
						uni.showToast({
							icon:'none',
							title:res.data.msg||'请求错误'
						})
					}
				} 
			},
			fail(err){
				// 失败返回失败结果
				uni.showToast({
					title: '请求失败',
					icon:'error'
				})
				console.error(err);
				reject(err)
			},
			complete(){
				// 完成 关闭loading
				if(loading){
					uni.hideLoading()
				}
			}
		})
	})
}

// 定义get简洁方法
request.get=function(url,config){
	return  request({
		url,
		method:"GET",
		...config
	})
}

// 定义post简洁方法
request.post=function(url,data,config){
	return  request({
		url,
		method:"POST",		
		...config,
		data
	})
}
// 导出请求
export default request;

统一控制api.js

request.post(url,data,needToken)

参数:

  • url 请求url
  • data 请求参数data
  • needToken 是否需要参数
// @/api/index.js

import request from '@/utils/request.js' 

// 用户注册
export function customUseRegister(data){
	return request.post("/xxxx1",data)
}

// 微信用户登录
export function customUserLogin(data){
	return request.post("/xxxx2",data)
} 

// 更新用户信息 -- 需要使用Token
export function customUserUpdate(data){
	return request.post("/xxxx3",data,{needToken: true})
}

组件中使用

import { customUserLogin, customUseRegister,customUserUpdate } from '@/api/index.js'

customUserUpdate(data).then((res) => {
  console.log('成功', res);  
}).catch((err) => { 
  console.error('登录失败', err);
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/850815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决mysql常见错误,安装mysql提示Install/Remove of the service Denied!/显示无法启动/服务名无效

​​​​​1.概述问题 1.1 在安装mysql中提示Install/Remove of the service Denied! 1.2 MySQL 服务没有加载到电脑上时,有以下原因: 1.2.1 端口被占用,需要更改端口,也可以卸载重装mysql。 1.2.2 启动 MySQL 服务是就会提示 服务…

vue3中使用vue-simple-uploader

vue-simple-uploader本身是基于vue2的,直接npm i vue-simple-uploader -S下载下来版本的是0.7.6。在vue3中无法使用会报错。 解决:使用next安装接下来要发布的版本就会下载1.0.1版本,即可使用vue3 npm i vue-simple-uploadernext -S 注意&…

安全杂记 - Linux文本三剑客之awk

目录 1.什么是AWK2.正则表达式3.语法4.内置变量示例printf命令5.复现awk经典实例(1).插入几个新字段(2).格式化空白(3).筛选IPv4地址(4).筛选给定时间范围内的日志 1.什么是AWK awk、grep、sed是linux操作文本的三大利器,合称文本三剑客。三者的功能都是处理文本&a…

java+springboot+mysql校园通讯录管理系统

项目介绍: 使用javaspringbootmysql开发的校园通讯录管理系统,系统包含超级管理员、管理员、用户角色,功能如下: 超级管理员:管理员管理;部门管理;用户管理;留言管理;公…

4.时间与窗口

4.1 时间类型 在Flink中定义了3种时间类型: 事件时间(Event Time):事件的发生事件,数据本身自带时间字段。处理时间(Processing Time):计算引擎处理时的系统时间。和摄取时间(Inge…

golang协程池(goroutine池)ants库实践

golang中goroutine由运行时管理,使用go关键字就可以方便快捷的创建一个goroutine,受限于服务器硬件内存大小,如果不对goroutine数量进行限制,会出现Out of Memory错误。但是goroutine泄漏引发的血案,想必各位gopher都经历过&#…

分布式任务调度平台XXL-JOB学习笔记-helloworld运行

环境:win10 eclipse java17 mysql8.0.17 xxl-job 2.4 源码:https://github.com/xuxueli/xxl-job/ 导入时按Existing Maven Projects导入,先导入xxl-job-admin(管理平台)和xxl-job-executor-sample-springboot&#x…

帆软设计器大坑:导出的模板会改变数据集的类型

今天早上在调试一个帆软决策报表(*.frm)中的可视化图表。无意中发现之前自己做的数据源变成了内置数据源(ps.不会更新的静态数据)。 查看了原来复制用的模板: 另存为模板(含数据),放…

LVS-DR模式集群构建过程演示

一、工作原理 LVS的工作原理 1.当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 2.PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链 3.IPVS是工作在IN…

THS4301 振荡问题排查及解决过程

项目背景简介: 本项目是基于一款微弱信号处理前级模拟电路设计方案。 问题描述: 在生产标定中,发现以前的程序在小量程标定后,切换到差分和单端后,两者的直流偏置不一样,且切换到差分输入时,能发现有振荡现象(有设备单端输入也有振荡); 排查分析过程: 1)首先可以…

车云一体化系统基础理论

车云一体化系统基础理论 介绍目标正文 参考文档 介绍 最近在调研车云链路一体化的整套解决方案,涉及分布式消息队列(RocketMQ)、分布式存储(Doris)、离线数据处理(Spark)、用户行为日志分析&am…

二级python和二级c哪个简单,二级c语言和二级python

大家好,小编为大家解答二级c语言和二级office一起报可以吗的问题。很多人还不知道计算机二级c语言和python哪个好考,现在让我们一起来看看吧! 介绍Python有很多库和使用Qt编写的接口,这自然创建c调用Python的需求。一路摸索,充满艰辛的添加头…

机器学习笔记:李宏毅ChatGPT:生成式学习的两种策略

1 策略1 “各个击破”——autoregressive model “各个击破”——一个一个生成出来 2 策略2 : “一次到位”——non-autoregressve model 一步到位,全部生成出来 2.1 non-autoregressive model 如何确定长度? 两种策略 策略1:始…

Android OkHttp源码分析--分发器

OkHttp是当下Android使用最频繁的网络请求框架,由Square公司开源。Google在Android4.4以后开始将源码中 的HttpURLConnection底层实现替换为OKHttp,同时现在流行的Retrofit框架底层同样是使用OKHttp的。 OKHttp优点: 1、支持Http1、Http2、Quic以及Web…

MySQL多实例下安装不同的版本

MySQL多版本安装 主要步骤: 1. 在/etc/my.cnf 配置中,更改对应配置。相对于同一版本多实例需要配置的参数,不同版本多实例需要多配置basedir参数,指向mysql的解压目录。 2. 初始化数据目录。进入对应解压的MySQL目录&#xff…

Transformer理论学习

Transformer出自于论文《attention is all you need》。 一些主流的序列模型主要依赖于复杂的循环结构或者CNN,这里面包含了编解码器等。而Transformer主要的结构是基于注意力机制,而且是用多头注意力机制去替换网络中的循环或者CNN(换言之就是transfor…

一篇文章带你彻底了解Java Object类

一篇文章带你彻底了解Java Object类 ​ 在Java的世界中,有一个神秘的存在,它是所有类的根基,无所不在,无所不知。它就是——Object类。本文将带你深入探索Java中这个神秘之源,解密Object类的奥秘,让你更好…

粒子群算法运行时间太长怎么办?—教你一招降低94%的运行时间

不管是初学者还是精通智能优化算法(粒子群算法,遗传算法等)的朋友,相信你们都对智能优化算法运行之慢深有体会,对于比较复杂的问题,经常出现运行一次几小时,调试一次几小时的情况。调试了这么多年代码,智能…

数仓架构模型设计参考

1、数据技术架构 1.1、技术架构 1.2、数据分层 将数据仓库分为三层,自下而上为:数据引入层(ODS,Operation Data Store)、数据公共层(CDM,Common Data Model)和数据应用层&#xff…

IoTDB原理剖析

一、介绍 IoTDB(物联网数据库)是一体化收集、存储、管理与分析物联网时序数据的软件系统。 Apache IoTDB采用轻量式架构,具有高性能和丰富的功能。 IoTDB从存储上对时间序列进行排序,索引和chunk块存储,大大的提升时序…