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


    一、背景

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

    二、创建环境文件

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

    2.2、env.js文件

    1. let BASE_URL
    2. //开发环境中
    3. if (process.env.NODE_ENV === 'development') {
    4. // 开发环境
    5. BASE_URL = 'http://xxxx' //开发环境请求地址
    6. } else {
    7. // 生产环境
    8. BASE_URL = 'https://xxxx' //生成环境请求地址
    9. }
    10. 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中接收响应后处理响应数据

    1. import BASE_URL from '@/env.js' //引入接口共用地址
    2. import useUserStore from '@/store/user.js' //引入仓库,使用的是pinia
    3. export const request = (options) => {
    4. return new Promise((resolve, reject) => {
    5. // 获取用户令牌
    6. let token = useUserStore().token
    7. // 设置请求头
    8. const header = {
    9. 'Content-Type': 'application/json',
    10. Authorization: `Bearer ${token}`,
    11. ...options.header // 可以传入额外的请求头参数
    12. }
    13. // ⭐在发送请求之前执行拦截操作
    14. uni.request({
    15. url: BASE_URL + options.url, //接收请求的API
    16. method: options.method || 'GET', //接收请求的方式,如果不传默认为GET
    17. data: options.data || {}, //接收请求的data,不传默认为空
    18. header: header, //接收请求的header
    19. success(res) {
    20. // ⭐在这里处理接收到响应后处理响应数据
    21. if (res.data.code != 0) {
    22. // 提示重新登录
    23. uni.$showMsg('请登录')
    24. useUserStore().userLogout()
    25. setTimeout(() => {
    26. uni.switchTab({
    27. url: '/pages/my/my'
    28. })
    29. }, 1000)
    30. }
    31. resolve(res.data) // 使用resolve将数据传递出去
    32. },
    33. fail: (err) => {
    34. reject(err)
    35. }
    36. })
    37. })
    38. }

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

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

    1. import {request} from './request.js' //导入封装好的js文件
    2. //登录 post请求
    3. export const login = (data)=>{
    4. return request({
    5. url:'wx-api/login',
    6. method:'post',
    7. data:data
    8. })
    9. }
    10. //用户信息 get请求
    11. export const info = ()=>{
    12. return request({
    13. url:'/wx-api/me/info',
    14. })
    15. }

    3.4、页面调用api文件使用

    四、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文件,用于封装请求

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

    1. import BASE_URL from '@/env.js' //引入接口共用地址
    2. import useUserStore from '@/store/user.js' //引入仓库,使用的是pinia
    3. export const setRequestConfig = () => {
    4. uni.$u.http.setConfig((config) => {
    5. /* config 为默认全局配置*/
    6. config.baseURL = BASE_URL
    7. return config
    8. })
    9. // 请求拦截
    10. uni.$u.http.interceptors.request.use(
    11. (config) => {
    12. let token = useUserStore().token
    13. if (token) {
    14. config.header.Authorization = `Bearer ${token}`
    15. }
    16. return config
    17. },
    18. (error) => {
    19. return Promise.reject(error)
    20. }
    21. )
    22. // 响应拦截
    23. uni.$u.http.interceptors.response.use(
    24. (response) => {
    25. if (response.data.code == 401) {
    26. // 提示重新登录
    27. uni.$showMsg('请登录')
    28. useUserStore().userLogout()
    29. setTimeout(() => {
    30. uni.switchTab({
    31. url: '/pages/my/my'
    32. })
    33. }, 1000)
    34. }
    35. return response
    36. },
    37. (error) => {
    38. return Promise.reject(error)
    39. }
    40. )
    41. }

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

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

    1. import { setRequestConfig } from './request.js';
    2. // 调用setRequestConfig函数进行请求配置
    3. setRequestConfig();
    4. const http = uni.$u.http
    5. // 发起登录请求 post请求
    6. export const requestLogin = (data) => http.post('/wx-api/login', data);
    7. //获取个人中心信息 get请求
    8. export const requestUserInfo = () => http.get('/wx-api/me/info')

    4.4、页面调用api文件使用

    最后:👏👏😊😊😊👍👍 

  • 相关阅读:
    【GPU】Nvidia CUDA 编程中级教程——数据复制与计算的重叠
    同步锁synchronized追本溯源
    ISO食品安全管理体系认证条件
    网格窗帘布能符合NFP92-503法国M2级别要求吗?
    如何保证同事的代码不会腐烂?一文带你了解 Alibaba COLA 架构
    javascript追加标签
    [附源码]计算机毕业设计JAVA竞价拍卖系统
    Vue10 键盘事件
    大数据ClickHouse(十一):MergeTree系列表引擎之AggregatingMergeTree
    C++字符串大小写转换
  • 原文地址:https://blog.csdn.net/weixin_71403100/article/details/132711136