uniapp 中集成 axios 封装request,实现若依权限认证和若依 api方法共用

uniapp 中集成 Axios ,封装request,实现若依权限认证和若以请求方法的直接复用,直接复制若以js中的请求方法到uniapp使用即可

在 Uniapp 开发中,与后端 API 进行交互是至关重要的环节。为了实现更高效、可维护的 API 调用,我们可以集成 Axios 并进行封装,使其能够与若依框架的 API 进行良好的交互和共用 JS 方法。

一、为什么要封装 Axios

  1. 提高可维护性:将与 API 交互的代码封装在一个地方,便于管理和修改。如果 API 的地址、请求头或其他配置发生变化,只需要在封装的代码中进行修改,而不需要在整个项目中逐个查找和修改。
  2. 代码复用:封装后的 API 请求可以在多个页面和组件中重复使用,减少了代码重复,提高了开发效率。
  3. 增强可扩展性:可以方便地添加请求拦截器和响应拦截器,实现诸如添加请求头、处理错误响应、统一的错误处理等功能。

二、具体封装步骤

1. 安装依赖

首先,确保在 Uniapp 项目中安装了axiosaxios-adapter-uniapp。可以通过以下命令进行安装:

npm install axios axios-adapter-uniapp

2. 导入依赖和配置

在项目中创建一个用于封装 Axios 的文件,比如axiosService.js。在这个文件中,导入axiosaxios-adapter-uniapp,并导入项目中的配置文件(如果有)以获取 API 的主机地址等信息。

import axios from "axios";
import axiosAdapterUniapp from 'axios-adapter-uniapp';
import store from "../store";
import { host } from "./config";

3. 创建 Axios 实例

使用axios.create()方法创建一个 Axios 实例,并设置一些基本的配置,如baseURL、请求头、超时时间等。

const request = axios.create({
    baseURL: host,
    headers: {
        'Content-Type': 'application/json;charset=utf-8',
    },
    adapter: axiosAdapterUniapp,
    timeout: 10000,
});

4. 添加请求拦截器

请求拦截器可以在发送请求之前进行一些操作,比如添加请求头中的认证信息。在这个例子中,我们从本地存储中获取token,如果存在token,则将其添加到请求头中。如果没有token,则重定向到登录页面。

request.interceptors.request.use(function (config) {
    // 发送请求的相关逻辑
    let token = uni.getStorageSync('My-Token');
    if (token) {
        config.headers.Authorization = 'Bearer ' + token;
    } else {
        uni.redirectTo({
            url: "/pages/login/login",
        });
    }
    return config;
}, function (error) {
    return Promise.reject(error);
});

5. 添加响应拦截器

响应拦截器可以在接收到响应之后进行一些操作,比如处理错误响应。在这个例子中,如果响应的状态码是 401(认证失败),则重定向到登录页面。如果响应出现错误,则打印错误信息并返回一个 Promise 错误对象。

request.interceptors.response.use(res => {
    if (res.data.code === "401") {
        console.log("认证失败");
        uni.redirectTo({
            url: "/pages/login/login",
        });
    }
    return res.data;
}, error => {
    console.log("获取失败");
    console.log(error);
    return Promise.reject(new Error('faile'));
});

6. 对外暴露封装后的请求方法

最后,将封装好的 Axios 实例对外暴露,以便在项目中的其他地方使用。

export default request;

三、使用封装后的request

在 Uniapp 的页面或组件中,可以通过导入封装好的request来进行 API 请求。例如:

import request from "./axiosService.js";

// 发送 GET 请求
request.get('/api/users').then(response => {
    console.log(response);
}).catch(error => {
    console.error(error);
});

// 发送 POST 请求
request.post('/api/users', { name: 'John', age: 30 }).then(response => {
    console.log(response);
}).catch(error => {
    console.error(error);
});

通过以上封装,我们可以在 Uniapp 项目中方便地与若依框架的 API 进行交互,实现高效的前后端分离开发。同时,封装后的代码也更加易于维护和扩展,为项目的长期发展提供了保障。

四、案例代码

1. 封装好的request.js文件全部代码如下

import axios from "axios";
import axiosAdapterUniapp from 'axios-adapter-uniapp'
import store from "../store";
import { host } from "./config";


// 封装axios构造函数请求 
// 1.先是自定义一个方法名
// 2.然后获取头部token值
// 3.延长器设不设置都可以
const request = axios.create({
  baseURL: host,
  headers: {
    // X-Litemall-Token这个名称就固定这个
	'Content-Type' : 'application/json;charset=utf-8'
  },
  adapter: axiosAdapterUniapp,
  // 超时(毫秒)
  timeout: 10000
})

// 前端请求拦截器
request.interceptors.request.use(function (config) {

  // 发送请求的相关逻辑
  // config:对象  与 axios.defaults 相当
  // 借助 config 将 localStorage 中的 token 加入请求头
  let token = uni.getStorageSync('My-Token')
  // 判断token存在就加入请求头
  if (token) {
    config.headers.Authorization = 'Bearer ' + token
  }else{
	  uni.redirectTo({
	  	url:"/pages/login/login"
	  })
  }

  // 这里也可以将一些反爬的加密信息加入请求头中的自定义字段中交由后端进行验证 ---------------
  // todo
  // ---------------------------------------------------------------------------------
  
  return config
}, function (error) {
  // Do something with request error
  return Promise.reject(error)
})
// 响应拦截器
// 1.相应上面的请求拦截器的需求
// 2.把上面的请求拦截器的需求全部做到
//TODO 从这里判断,如果返回的是过期则,跳转到登录界面
request.interceptors.response.use(res => {
	if(res.data.code=="401"){
	  console.log("认证失败");
	  uni.redirectTo({
		url:"/pages/login/login"
	  })
	}
	return res.data
}, error => {
	console.log("获取失败");
	console.log(error);
	return Promise.reject(new Error('faile'))
})

// 对外暴露前面创建的构造方法
export default request

2. uniapp中js方法如下(直接复制若依api文件夹下js文件中的方法即可)

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

// 查询派车单列表
export function listCar(query) {
  return request({
    url: '/car/car/list',
    method: 'get',
    params: query
  })
}


3. 页面使用代码如下

import {listCar } from './api/index.js'

listCar({name:'xxx'}).then(res=>{
	console.log(res);
	that.carList = res.rows
})

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

国标GB28181视频融合监控汇聚平台的方案实现及场景应用

Liveweb国标视频融合云平台基于端-边-云一体化架构,部署轻量简单、功能灵活多样,平台可支持多协议(GB28181/RTSP/Onvif/海康SDK/Ehome/大华SDK/RTMP推流等)、多类型设备接入(IPC/NVR/监控平台),在视频能力上&#xff0…

CNS-WRFID-01地标卡读写器|写卡器DEMO软件读、写操作说明

CNS-WRFID-01地标卡读写器|写卡器是一款高频读写设备,支持ISO15693协议芯片卡,地标标签读写,支持兴颂系列抗金属|非抗金属RFID标签,如:CNS-CRFID-01、CNS-CRFID-02、CNS-CRFID-03、CNS-CRFID-04、CNS-CRFID-05、CNS-CR…

chorme浏览器 您的连接不是私密连接

‌当浏览器显示“您的连接不是私密连接,攻击者可能会试图从 localhost 窃取您的信息(例如:密码、消息或信用卡信息)”的警告时,这通常意味着您正在尝试访问的网站的安全证书存在问题,可能是因为它使用的是自…

2015年国赛高教杯数学建模A题太阳影子定位解题全过程文档及程序

2015年国赛高教杯数学建模 A题 太阳影子定位 技术就是通过分析视频中物体的太阳影子变化,确定视频拍摄的地点和日期的一种方法。   1.建立影子长度变化的数学模型,分析影子长度关于各个参数的变化规律,并应用你们建立的模型画出2015年10月…

ESP32-WROOM-32 [创建AP站点-客户端-TCP透传]

简介 基于ESP32-WROOM-32 开篇(刚买), 本篇讲的是基于固件 ESP32-WROOM-32-AT-V3.4.0.0(内含用户指南, 有AT指令说明)的TCP透传设置与使用 设备连接 TTL转USB线, 接ESP32 板 的 GND,RX2, TX2 指令介绍 注意,下面指…

利士策分享,如何在有限的时间内过上富足的生活?

利士策分享,如何在有限的时间内过上富足的生活? 在快节奏的现代生活中,追求富足不仅仅是物质上的丰盈,更是心灵的满足与生活的平衡。 如何在有限的时间内实现这一目标,是许多人心中的疑问。 以下是一些实用建议&#…

Linux centerOS 服务器搭建NTP服务

1,安装 NTP软件 sudo yum -y install ntp2,编辑配置文件 sudo vim /etc/ntp.conf 3,修改配置 在ntp.conf文件中,可以配置服务器从哪些上游时间源同步时间。如果你想让你的服务器对外同步时间,可以去掉restrict d…

BGP实验

1、实验拓扑 EBGP:位于不同AS的BGP路由器之间的BGP对等体关系。两台路由器之间要建立EBGP对等体关系,必须满足两个条件: 两个路由器所属AS不同(即AS号不同)。 在配置EBGP时,Peer命令所指定的对等体IP地址要…

【Docker】Docker快速入门

Docker学习笔记 一、Docker概述 为什么会出现Docker? 安卓开发流程:apk(java开发的)发布到应用商店,用户安装apk即可使用。 后端开发流程: jar(java开发的)带上环境发布到Docker仓库,用户从Docker仓库拉取镜像并部署。 总结…

智慧安防监控EasyCVR视频汇聚管理平台如何修改视频流分辨率?

智慧安防监控EasyCVR视频管理平台能在复杂的网络环境中,将前端监控设备进行统一集中接入与汇聚管理。EasyCVR平台支持H.264/H.265视频压缩技术,可在4G/5G/WIFI/宽带等网络环境下,传输720P/1080P/2K/4K高清视频。视频流经平台处理后&#xff0…

ByteTrack多目标跟踪流程图

ByteTrack多目标跟踪流程图 点个赞吧,谢谢。

VulnHub-Bilu_b0x靶机笔记

Bilu_b0x 靶机 概述 Vulnhub 的一个靶机,包含了 sql 注入,文件包含,代码审计,内核提权。整体也是比较简单的内容,和大家一起学习 Billu_b0x.zip 靶机地址: https://pan.baidu.com/s/1VWazR7tpm2xJZIGUS…

php thinkphp 小程序发送订阅模板消息通知

小程序需要在我的模板中先选用模板 小程序需要先订阅模板 wx.requestSubscribeMessage({tmplIds: ["XII_0By8D9WabnUjVPB_8S1itsm2d4_xxx"],success:

**CentOS7安装redis**

CentOS7安装redis 首先解压压缩包 redis-7.0.0.tar.gz tar -xvf redis-7.0.0.tar.gz接着进入到redis中 cd redis-7.0.0.tar.gz执行make命令编译 make接着执行安装命令 make install之后编译安装完后 程序都会在/usr/local/bin目录下 这里需要将在redis目录中redis.conf配置…

基于STM32的电压检测WIFI模拟

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STM32单片机,通过滑动变阻器模拟电压传感器检测电压,通过12864显示显示电压和电压阈值,按键可以控制阈值的增加,并通过串口实时显示相关参数和状…

2024年主流前端框架的比较和选择指南

在选择前端框架时,开发者通常会考虑多个因素,包括框架的功能、性能、易用性、社区支持和学习曲线等。以下是一些主流前端框架的比较和选择指南。 1. 主流前端框架简介 React 优点: 组件化开发,易于复用和维护。虚拟DOM提高了性能。强大的生…

二叉树进阶oj题【二叉树相关10道oj题的解析和代码实现】

目录 二叉树进阶oj题1.根据二叉树创建字符串2.二叉树的层序遍历3.二叉树的层序遍历 II4.二叉树的最近公共祖先5.二叉搜索树和双向链表6.从前序与中序遍历序列构造二叉树7.从中序和后序遍历序列来构造二叉树8.二叉树的前序遍历,非递归迭代实现9.二叉树中序遍历 &…

线性插值和最近邻插值(Linear Interpolation and Nearest Neighbor Interpolation)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

828华为云征文 | 解锁数据价值,使用华为云Flexusx与Solr构建智能搜索应用

前言 在数字化转型的浪潮中,数据已成为企业最宝贵的资产之一。如何高效、准确地解锁这些数据价值,成为众多企业面临的挑战。华为云Flexusx服务器以其卓越的性能、灵活的资源调度能力和强大的可扩展性,为企业提供了一个理想的平台。结合Apache…

力扣【118-杨辉三角】【数组-C语言】

题目:力扣-118 杨辉三角:(算法思路) 1. 每行第一个数和最后一个数都是1 2. 把杨辉三角左端对齐,从第三行开始,非首尾的元素值等于上一行同列的元素与该元素之前的元素之和,即 t [ j ] r e t …