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

uniapp中uni.request的统一封装 (ts版)

文章目录

  • 前言
  • 一、我们为什么要去封装?
  • 二、具体实现
    • 1.创建一个请求封装文件:
    • 2.封装 uni.request:
    • 3.如何去使用?
  • 总结

前言

在uniapp中如何去更简洁高效的发送我们的请求,下面就介绍了uni.request()二次封装。


一、我们为什么要去封装?

在 UniApp 中,uni.request 是用于发起网络请求的方法。为了简化代码、提高可维护性和统一管理请求逻辑,通常会对 uni.request 进行统一封装。以下是一个简单的封装示例:

二、具体实现

1.创建一个请求封装文件:

在src目录下新建一个文件,比如 request.js,用于存放封装后的请求方法。
在这里插入图片描述


2.封装 uni.request:

代码如下(示例):

/**
 * 添加拦截器:
 *   拦截 request 请求
 *
 * TODO:
 *   1. 非 http 开头需拼接地址
 *   2. 请求超时
 *   3. 添加小程序端请求头标识
 *   4. 添加 token 请求头标识
 */

import { useUserStore} from '@/stores'

// '填写你的网络请求基地址' 以下是我自己开发的服务器接口,你们换成你们自己的服务器地址
const baseURL = 'http://localhost:3000/api'

// 添加拦截器
const httpInterceptor = {
  // 拦截前触发
  invoke(options:UniApp.RequestOptions) {
    // 1. 非 http 开头需拼接地址
    if (!options.url.startsWith('http')) {
      options.url = baseURL + options.url
    }
    // 2. 请求超时, 默认 60s
    options.timeout = 10000
    // 3. 添加小程序端请求头标识
    options.header = {
      ...options.header,
      'source-client': 'miniapp',
    }
    // 4. 添加 token 请求头标识
    // pina仓库里面存的token信息
    const userStore= useUserStore()
    const token = userStore.userInfo?.token
  	// 统一携带token
    if (token) {
      options.header.Authorization = token
    }
  },
}
// 最后添加到uniapp的拦截器上
uni.addInterceptor('request', httpInterceptor)
type Data<T> = {
  code: string
  msg: string
  result: T
}

// 2.2 添加类型,支持泛型
export const request= <T>(options:UniApp.RequestOptions) => {
  // 1. 返回 Promise 对象
  return new Promise<Data<T>>((resolve, reject) => {
    uni.request({
      ...options,
      // 响应成功
      success(res) {
        // 状态码 2xx, axios 就是这样设计的
        if (res.statusCode >= 200 && res.statusCode < 300) {
          // 2.1 提取核心数据 res.data
          resolve(res.data as Data<T>)
        } else if (res.statusCode === 401) {
          // 401错误  -> 清理用户信息,跳转到登录页
          const userStore = useUserStore()
          userStore .clearUserInfo()
          uni.navigateTo({ url: '/pages/login/login' })
          reject(res)
        } else {
          // 其他错误 -> 根据后端错误信息轻提示
          uni.showToast({
            icon: 'none',
            title: (res.data as Data<T>).msg || '请求错误',
          })
          reject(res)
        }
      },
      // 响应失败
      fail(err) {
        uni.showToast({
          icon: 'none',
          title: '网络错误,换个网络试试',
        })
        reject(err)
      },
    })
  })
}


3.如何去使用?

在需要请求的地方进行进入操作
在这里插入图片描述

总结

以上就是今天要讲的内容,本文仅仅简单介绍了uniapp中uni.request()的二次封装,uniapp官方文档还有很多介绍,以上就是个人的学习分享,仅供参考。


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

相关文章:

  • PHP:构建高效Web应用的基石与实战案例
  • 【C++】多态(上)
  • 废品回收小程序/环保垃圾回收/收二手垃圾小程序/分类资源回收系统/独立版系统源码
  • 解析TMalign文本文件中的转换矩阵
  • 鸿蒙harmonyos next flutter混合开发之开发package
  • C++队列、双向队列
  • Linux Debian12使用Podman安装bwapp靶场环境
  • [Linux]Shell基本
  • X-Spreadsheet使用教程:打造你的Web端电子表格应用
  • 在实时语音交互上超过GPT-4o,端到端语音模型Mini-Omni部署
  • 滚雪球学MySQL[8.3讲]:数据库中的JSON与全文检索详解:从数据存储到全文索引的高效使用
  • 【Kubernetes】日志平台EFK+Logstash+Kafka【实战】
  • Android中的页面跳转机制
  • 【Android 源码分析】Activity生命周期之onDestroy
  • 如何使用Flask框架创建一个类似OpenAI的REST API接口
  • 一文上手SpringSecurity【三】
  • 大语言模型入门(二)——提示词
  • 5分钟学会SPI
  • MySQL基础练习题49-低质量的问题
  • 【动态规划】完全背包问题
  • 媒介坊:软文自助发布平台,开启营销新篇章
  • 什么是大语言模型的大海捞针指标
  • 【数据库差异研究】update与delete使用表别名的研究
  • Swift并发笔记
  • 「4.3」维护序列
  • 多系统萎缩患者必看!这些维生素助你对抗病魔
  • Docker的入门详解
  • 第十四讲-输入控件QPlainTextEdit
  • redis数据库学习一
  • [Cocoa]_[初级]_[使用NSNotificationCenter作为目标观察者实现时需要注意的事项]