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 errorreturn 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.xdnf.cn/news/149599.html

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

相关文章

Vue+Tui-image-editor实现图片编辑(涂鸦,裁剪,标注,旋转,滤镜)

目录 前言 效果展示 涂鸦 裁剪 标注 旋转 滤镜 安装 使用 中文化自定义样式按钮优化 参考链接 前言 需求:对图片进行旋转、缩放、裁剪、涂鸦、标注、添加文本等。 效果展示 涂鸦 裁剪 标注 旋转 滤镜 安装 npm i tui-image-editor // or yarn add tui-image…

【MySql】在ubuntu下安装MySql数据库

目录 查看操作系统版本 添加 MySql APT源 访问下载页面并下载发布包 安装发布包 执行安装命令 从MySql APT源更新包信息 安装MySql 执行安装命令 查看MySql状态 开启自启动 登录MySql 查看操作系统版本 rootVM-24-2-ubuntu:~# lsb_release -a No LSB modules are ava…

数据集-目标检测系列-鲨鱼检测数据集 shark >> DataBall

数据集-目标检测系列-鲨鱼检测数据集 shark >> DataBall 数据集-目标检测系列-鲨鱼检测数据集 shark 数据量:6k 想要进一步了解,请联系。 DataBall 助力快速掌握数据集的信息和使用方式,百种数据集,持续增加中。 示例&…

【学习笔记】Transformer架构探讨

Transformer 是一种彻底改变人工智能方法的神经网络架构。它首次在 2017 年的里程碑式论文 "Attention is All You Need"[1] 中被提出,并迅速成为深度学习模型的首选架构,为 OpenAI 的 GPT、Meta 的 Llama 和 Google 的 Gemini 等文本生成模型…

Django操作ES实现搜索功能

Django操作ES实现题目的高亮搜索功能 一、基础配置二、使用ES完成题目的高亮搜索1. ES的初始化接口2. 使用ES实现题目的增删改查1. 题目的高亮搜索2. 题目的高亮搜索优化3. 将数据存储到MYSQL中持久化存储并同步到ES中一、基础配置 下载依赖,与之前配置的ES版本一致。 ES的配置…

SpringBoot文档管理系统:架构与功能

第2章相关技术 2.1 Java技术介绍 Java语言擅长开发互联网类应用和企业级应用,现在已经相当的成熟,而且也是目前使用最多的编程语言之一。Java语言具有很好的面向对象性,可以符合人的思维模式进行设计,封装是将对象的属性和方法尽可…

[利用python进行数据分析01] “来⾃Bitly的USA.gov数据” 分析出各个地区的 windows和非windows用户

2011 年, URL 缩短服务 Bitly 跟美国政府⽹站 USA.gov 合作,提供 了⼀份从⽣成 .gov 或 .mil 短链接的⽤户那⾥收集来的匿名数据。 在 2011 年,除实时数据之外,还可以下载⽂本⽂件形式的每⼩时 快照。 数据集下载:通…

复杂网络(Complex Network)社团数据可视化分析(gephi)实验

Experiment Report of complex network course 复杂网络实验报告 目录 Experiment Report of complex network course 复杂网络实验报告 实验目标(The objective of the experiment): 实验流程(The flow of the experiment&a…

实验室ICPR 2024论文分享┆FPMT: 基于增强型半监督模型的交通事件检测(含详细视频解读)

目录 论文分享简介 1. 会议介绍 2. 研究背景及主要贡献 3. 方法 4. 实验 5. 结论 6. 论文介绍视频 论文分享简介 本推文详细介绍了一篇实验室的最新论文成果《FPMT: Enhanced Semi-Supervised Model for Traffic Incident Detection》,该论文已被第27届国际…

23中设计模式,以及三种常见的设计模式demo

常见的23种设计模式 Java设计模式是软件工程中常见的解决方案,用于解决在软件设计中反复出现的问题。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。这里,我将简单介绍三种常见的设计模式,并给出相应的Java代码示例…

序列化和自定义协议

序言 在上一篇文章中,我们介绍了Socket 编程,已经可以简单地使用该方法来进行服务端和客户端的数据了。在这篇文章中我们将在此基础上学习序列化和反序列化,以及在应用层上自定义协议。 序列化和反序列化 1. 为什么需要序列化和反序列化&…

网页跨域异常100%解决(谷歌浏览器)

目的: 1.开发过程中,经常出现浏览器提示跨域 2.原因新版本浏览器拦截跨域请求 3.错误关键消息如下: Access-Control-Allow-Origin cess to XMLHttpRequest at http://192.168.1.104:3080/api/Login/Store from origin http://yingyongliere…

数据分析学习之学习路线

前言 我们之前通过cda认证了解到数据分析行业,但是获取到证书,并不代表着,我们已经拥有的数据分析的能力,所以通过系统的学习数据分析需要掌握的能力,并学习大佬们的分析经验、分析思路,才是成为数据分析师…

为什么会出现电话机器人?语音电话机器人的出现起到了什么作用?

电话机器人的出现是科技发展与市场需求相结合的产物,它们的广泛应用反映了现代社会对效率、成本和服务质量的不断追求。以下是电话机器人出现的几个主要原因。 1. 市场需求的变化 随着经济的发展和消费模式的转变,客户对服务的期望不断提高。他们希望能…

数据集-目标检测系列-海洋鱼类检测数据集 fish>> DataBall

数据集-目标检测系列-海洋鱼类检测数据集 fish>> DataBall 数据集-目标检测系列-海洋鱼类检测数据集 fish 数据量:1W 数据项目地址: gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview github: https://github.com/…

时间序列数据可视化

#时间序列可视化 #离散数据的时间序列可视化 import numpy as np import pandas as pdts pd.Series(np.random.randn(1000), indexpd.date_range(1/1/2000, periods1000)) ts ts.cumsum() ts.plot() #%% #连续数据的时间序列可视化 import matplotlib.pyplot as plt df pd.D…

论文复现:考虑电网交互的风电、光伏与电池互补调度运行(MATLAB-Yalmip-Cplex全代码)

论文复现:考虑电网交互的风电、光伏与电池储能互补调度运行(MATLAB-Yalmip-Cplex全代码) 针对风电、光伏与电化学储能电站互补运行的问题,已有大量通过启发式算法寻优的案例,但工程上更注重实用性和普适性。Yalmip工具箱则是一种基于MATLAB平台的优化软件工具箱,被广泛应用…

AWS注册时常见错误处理

引言 创建AWS账号是使用AWS云服务的第一步,但在注册过程中可能会遇到一些常见的问题。本文中九河云将帮助您排查和解决在创建AWS账户时可能遇到的一些常见问题,包括未接到验证电话、最大失败尝试次数错误以及账户激活延迟等。 常见问题及解决方法 1. …

生成式AI赋能:对话式BI引领数据分析新潮流

引言:数据交互的革新之旅 在信息爆炸的今天,我们与数据交互的方式正经历着前所未有的变革。静态的仪表盘,尽管曾以视觉上的革新引领一时风尚,但如今已难以满足用户对动态、深度数据洞察的迫切需求。用户不再满足于仅仅观赏精美的…

Go weak包前瞻:弱指针为内存管理带来新选择

在介绍Go 1.23引入的unique包的《Go unique包:突破字符串局限的通用值Interning技术实现》一文中,我们知道了unique包底层是基于internal/weak包实现的,internal/weak是一个弱指针功能的Go实现。所谓弱指针(Weak Pointer,也称为弱…