uniapp 网络请求封装(uni.request 与 uView-Plus)

news2024/11/25 1:04:21

一、背景

在开发项目中,需要经常与后端服务器进行交互;为了提高开发效率和代码维护性,以及降低重复性代码,便对网络请求进行封装统一管理。

二、创建环境文件

2.1、根目录新建utils文件夹,utils文件夹内新建env.js文件

2.2、env.js文件

let BASE_URL
//开发环境中
if (process.env.NODE_ENV === 'development') {
  // 开发环境
  BASE_URL = 'http://xxxx'  //开发环境请求地址
} else {
  // 生产环境
  BASE_URL = 'https://xxxx'  //生成环境请求地址
}

export default BASE_URL

⭐⭐说明:

创建的是vue3项目,与vue2项目的区别在于页面中调用api的写法不同,具体以需求为主

以下是两种uniapp请求的封装,分别为👇👇:

①uni.request 请求封装,②uniapp+uview-plus 请求封装

✍✍两种请求封装,根据需求二选一,不能同时使用

三、uni.request 请求封装(方法一)

3.1、官网地址👉:uni.request(OBJECT) | uni-app官网

3.2、在utils文件夹下创建request.js文件,用于封装请求

备注:在发送uni.request请求之前,可以执行拦截操作;在uni.request的success中接收响应后处理响应数据

import BASE_URL from '@/env.js' //引入接口共用地址
import useUserStore from '@/store/user.js' //引入仓库,使用的是pinia
export const request = (options) => {
  return new Promise((resolve, reject) => {
    // 获取用户令牌
    let token = useUserStore().token
    // 设置请求头
    const header = {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${token}`,
      ...options.header // 可以传入额外的请求头参数
    }
    // ⭐在发送请求之前执行拦截操作
    uni.request({
      url: BASE_URL + options.url, //接收请求的API
      method: options.method || 'GET', //接收请求的方式,如果不传默认为GET
      data: options.data || {}, //接收请求的data,不传默认为空
      header: header, //接收请求的header
      success(res) {
        // ⭐在这里处理接收到响应后处理响应数据
        if (res.data.code != 0) {
          // 提示重新登录
          uni.$showMsg('请登录')
          useUserStore().userLogout()
          setTimeout(() => {
            uni.switchTab({
              url: '/pages/my/my'
            })
          }, 1000)
        }
        resolve(res.data) // 使用resolve将数据传递出去
      },
      fail: (err) => {
        reject(err)
      }
    })
  })
}

3.3、在utils文件夹下创建api.js文件

api.js文件是用来调用封装好的uni.request,统一管理请求接口,在后续开发中只需要调用api.js文件即可

import {request} from './request.js' //导入封装好的js文件

//登录  post请求
export const login = (data)=>{
  return request({
    url:'wx-api/login',
    method:'post',
    data:data
  })
}

//用户信息  get请求 
export const info = ()=>{
  return request({
    url:'/wx-api/me/info',
  })
}

3.4、页面调用api文件使用

<script setup>
import { login } from '@/utils/api.js'
//点击登录按钮操作
const getToken = async () => {
  let res = await login()
  console.log('res', res)
}
</script>

四、uniapp+uview-plus 请求封装(方法二)

4.1、前提条件:项目中引入uview-plus

具体操作可查看之前写的文章👉:uniapp使用 uview-plus 和 Pinia(vue3项目)_翻滚的露西的博客-CSDN博客

uview-plus官网地址👉: Http请求 | uview-plus 3.0 - 全面兼容nvue的uni-app生态框架 - uni-app UI框架

4.2、 在utils文件夹下创建request.js文件,用于封装请求

在此可以书写请求和响应拦截

import BASE_URL from '@/env.js' //引入接口共用地址
import useUserStore from '@/store/user.js' //引入仓库,使用的是pinia
export const setRequestConfig = () => {
  uni.$u.http.setConfig((config) => {
    /* config 为默认全局配置*/
    config.baseURL = BASE_URL
    return config
  })
  // 请求拦截
  uni.$u.http.interceptors.request.use(
    (config) => {
      let token = useUserStore().token
      if (token) {
        config.header.Authorization = `Bearer ${token}`
      }
      return config
    },
    (error) => {
      return Promise.reject(error)
    }
  )
  // 响应拦截
  uni.$u.http.interceptors.response.use(
    (response) => {
      if (response.data.code == 401) {
        // 提示重新登录
        uni.$showMsg('请登录')
        useUserStore().userLogout()
        setTimeout(() => {
          uni.switchTab({
            url: '/pages/my/my'
          })
        }, 1000)
      }
      return response
    },
    (error) => {
      return Promise.reject(error)
    }
  )
}

4.3、在utils文件夹下创建api.js文件

api.js文件是用来调用uview-plus封装好的请求,统一管理请求接口,在后续开发中只需要调用api.js文件即可

import { setRequestConfig } from './request.js';

// 调用setRequestConfig函数进行请求配置
setRequestConfig();
const http = uni.$u.http
// 发起登录请求   post请求
export const requestLogin = (data) => http.post('/wx-api/login', data);
//获取个人中心信息  get请求
export const requestUserInfo = () => http.get('/wx-api/me/info')

4.4、页面调用api文件使用

<script setup>
import { requestLogin } from '@/utils/api.js'
//点击登录按钮操作
const getToken = async () => {
  let res = await requestLogin()
  console.log('res', res)
}
</script>

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

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

相关文章

中缀表达式 - 栈实现综合计算器

代码&#xff1a; package Algotithm.stackobject Calculator {def main(args: Array[String]): Unit {val expression "32*6-2"//创建两个栈&#xff1a;数栈、符号栈val numStack, operStack new ArrayStack2(10)//定义需要的相关变量var index, num1, num2, …

iOS开发Swift-9-SFSymbols,页面跳转,view屏幕比例,启动页-和风天气AppUI

1.创建项目 2.设置好测试机型,App显示名称,以及关闭横向展示. 3.下载SF Symbols. https://developer.apple.com/sf-symbols/ 右上角搜索 search ,可以找到很多系统自带图标.选择喜欢的图标,拷贝图标的名字. 插入一个Button,在Image中粘贴图标名称并选择,即可将Button变成想要的…

遥感图像应用:在低分辨率图像上实现洪水损害检测

代码来源&#xff1a;https://github.com/weining20000/Flooding-Damage-Detection-from-Post-Hurricane-Satellite-Imagery-Based-on-CNN/tree/master 数据储存地址&#xff1a;https://github.com/JeffereyWu/FloodDamageDetection/tree/main 数据详情&#xff1a;训练数据…

决策工具箱:战略分析必备工具与框架

跟随时代的步伐&#xff0c;企业战略也在不断演化。无论是初创企业还是知名企业&#xff0c;都需要有效的战略工具来指导其业务发展。探索这些必备工具&#xff0c;并学习如何最大限度地利用它们&#xff0c;是企业的一个学习目标。 战略分析工具和框架有很多&#xff0c;其中…

读懂AUTOSAR规范,之CanIf 发送缓冲(带实例代码)

1. General behavior一般行为 在CanIf范围内,传输过程始于调用CanIf_Transmit(),并在调用上层模块的回调服务<User_TxConfirmation>()时结束。在传输过程中,CanIf、CanDrv和CAN邮箱应共同将要传输的L-PDU仅存储一次在单个位置。根据传输方法,这些位置可以是: • CA…

Java字符串查找

目录 1.查找字符 &#xff08;1&#xff09;以索引查找字符 &#xff08;2&#xff09;以字符查找索引 2.查找字符串 在给定的字符串中查找需要的字符或字符串是常见的操作&#xff0c;以下是String类中常用的查找方法。 1.查找字符 查找字符分为两种情况&#xff1a;一种…

【两周学会FPGA】从0到1学习紫光同创FPGA开发|盘古PGL22G开发板学习之DDR3 IP简单读写测试(六)

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处 适用于板卡型号&#xff1a; 紫光同创PGL22G开发平台&#xff08;盘古22K&#xff09; 一&#xff1a;盘古22K开发板&#xff08;紫光同创PGL22G开发…

【Ubuntu20.04】【验证可行】修改切换输入法的快捷键

网上好多博客都是说添加输入法什么的&#xff0c;没说到关键点。 修改切换输入法的快捷键&#xff0c;是在系统设置的键盘快捷键那里修改的&#xff0c; 不是在输入法那里改的&#xff0c;如下图 看到上面的【Keyboard shortcuts】/ 【Typing】 默认是SuperSpace【微软键盘就…

电梯五方对讲接口说明 Sip五方对讲使用说明

1.2/4线接线模块输出接口;接4方对讲设备:12V&#xff0c;2/4线接线模块供电输入 -:GND&#xff0c;接地 R二/四线R Li二四线L 2.RS-485接口:预留援口&#xff0c;可接读卡器、楼层控制器、探头&#xff0c;需要软件额外开发实现。 3.短路输出接口2:对应短路输入接口&#x…

Vue2+Vue3基础入门到实战项目(六)——课程学习笔记

镇贴&#xff01;&#xff01;&#xff01; day07 vuex的基本认知 使用场景 某个状态 在 很多个组件 来使用 (个人信息) 多个组件 共同维护 一份数据 (购物车) 构建多组件共享的数据环境 1.创建项目 vue create vuex-demo 2.创建三个组件, 目录如下 |-components |--Son1.…

centos密码过期导致navicat无法通过SSH登录阿里云RDS问题

具体错误提示&#xff1a;2013 - Lost connection to server at "hand hake: reading initial communication packet, system error: 0 解决办法&#xff1a;更新SSH服务器密码

超越时间与人力的软件开发智慧:《人月神话》

目录 1、写在前面2、沟通&#xff01;沟通&#xff01;沟通&#xff01;3、“银弹论”4、“人月神话”不能成立的原因5、影响力6、图书推荐 1、写在前面 《人月神话》是由计算机科学家弗雷德里克布鲁克斯所著的一本经典著作&#xff0c;首次出版于1975年。这本书以一个个小故事…

@Controller和@RestController注解区别

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;SpringBoot、Spring、注解、Controller、RestController☀️每日 一言&#xff1a;弗雷尔卓德是个好地方&#xff0c;可以造东西、打架、大吃一顿&#xff0c;啊~~ 甜蜜的家园呐 ——《英雄联盟》…

微信小程序源码【195套】【源码导入视频教程+源码导入文档教程+详细图文文档教程】

一、项目说明 盒马鲜生.zip 轻客洗衣.zip 云文档.zip 仿ofo共享单车.zip 仿美团外卖.zip 仿饿了么.zip 灵犀外卖.zip 小契约&#xff08;交友互动小程序&#xff09;.zip 信息科技公司展示小程序.zip 华云智慧园区.zip 房地产公司展示.zip 企业OA系统小程序.zip 优惠券卡卷小程…

设计模式篇(Java):装饰者模式

&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;设计模式篇-装饰者模式 &#x1f468;‍&#x1f4bb;本文简述&#xff1a;装饰者模式的详解以及jdk中的应用 &#x1f468;‍&#x1f4bb;上一篇文章&#xff1a; 设计模式篇(Java)&#xff1a;桥接模式 &#x1f468;‍&am…

业务安全及案例实战

文章目录 业务安全1. 业务安全概述1.1 业务安全现状1.1.1 业务逻辑漏洞1.1.2 黑客攻击目标 2. 业务安全测试2.1 业务安全测试流程2.1.1 测试准备2.1.2 业务调研2.1.3 业务建模2.1.4 业务流程梳理2.1.5 业务风险点识别2.1.6 开展测试2.1.7 撰写报告 3. 业务安全经典场景3.1 业务…

conda的使用教程

conda的介绍 简单来说&#xff0c;conda软件就是来管理包的软件。以Python为例&#xff0c;在实际生活中&#xff0c;我们要处理多个不同的项目&#xff0c;因此&#xff0c;要安装不同的项目所需要的包&#xff0c;为了管理方便&#xff0c;conda就是用来打理不同项目的包&…

软考高级架构师下篇-13云原生架构设计理论与实践

目录 1. 考情分析2. 云原生架构内涵3. 云原生架构相关技术4. 前文回顾1. 考情分析 软考你报名了吗?下半年再来卷一个证书吧 本节主要学习云原生架构设计理论与实践。根据考试大纲,本小时知识点会涉及单选题型(约占2~4分)、案例题(25分)和论文题,本小时节内容偏重于方法…

自动化测试面试常见技术题目

1&#xff1a;一行代码实现1--100之和 print(sum(list(range(1,101)))) 2&#xff1a;如何在一个函数内部修改全局变量 global  修改全局变量 局部作用域只能调用全局作用域的变量&#xff0c;但是不熊修改全局作用域的变量&#xff0c;如果想要修改全局作用域的变量需要gl…

2023年中国信通院铸基计划“文本图像篡改检测系统技术规范”研讨会成功召开

2023年中国信通院铸基计划“文本图像篡改检测系统技术规范”&#xff08;简称“规范”&#xff09;研讨会于2023年8月16日在中国信息通信研究院成功召开&#xff0c;来自中国信息通信研究院、上海合合信息科技股份有限公司&#xff08;简称“合合信息”&#xff09;、华南理工大…