首页 > 其他分享 >对 uniapp 网络请求 uni.request 进行封装

对 uniapp 网络请求 uni.request 进行封装

时间:2023-08-20 20:00:42浏览次数:38  
标签:uniapp 封装 url request params uni method

前言

uniapp是一款基于Vue.js框架的跨平台开发工具,可以将代码编译成H5、小程序、App等不同平台的应用。在进行uniapp开发时,网络请求是必不可少的环节。为了方便开发,我们可以封装一些网络请求方法,以便在多个页面中复用,并且可以统一处理错误信息等问题,提高开发效率和代码质量。本文将介绍如何封装网络请求方法。

正文开始

1、封装 uni.request 请求:

在根目录创建 until 目录,在目录下创建 request.js 文件,编写以下代码

// 全局请求封装
const base_url = 'http://localhost:996'
// 需要修改token,和根据实际修改请求头
export default (params) => {
    let url = params.url;
    let method = params.method || "get";
    let data = params.data || {};
​
    let header = {}
    if (method == "post") {
        header = {
            'Content-Type': 'application/json'
        };
    }
    // 获取本地token
    if (uni.getStorageSync("token")) {
        header['Authorization'] = 'Bearer ' + uni.getStorageSync("token");
    }
​
    return new Promise((resolve, reject) => {
        uni.request({
            url: base_url + url,
            method: method,
            header: header,
            data: data,
            success(response) {
                const res = response
                // 根据返回的状态码做出对应的操作
                //获取成功
                console.log(res.statusCode);
                if (res.statusCode == 200) {
                    resolve(res.data);
                } else {
                    uni.clearStorageSync()
                    switch (res.statusCode) {
                        case 401:
                            uni.showModal({
                                title: "提示",
                                content: "请登录",
                                showCancel: false,
                                success(res) {
                                    setTimeout(() => {
                                        uni.navigateTo({
                                            url: "/pages/login/index",
                                        })
                                    }, 1000);
                                },
                            });
                            break;
                        case 404:
                            uni.showToast({
                                title: '请求地址不存在...',
                                duration: 2000,
                            })
                            break;
                        default:
                            uni.showToast({
                                title: '请重试...',
                                duration: 2000,
                            })
                            break;
                    }
                }
            },
            fail(err) {
                console.log(err)
                if (err.errMsg.indexOf('request:fail') !== -1) {
                    wx.showToast({
                        title: '网络异常',
                        icon: "error",
                        duration: 2000
                    })
                } else {
                    wx.showToast({
                        title: '未知异常',
                        duration: 2000
                    })
                }
                reject(err);
​
            },
            complete() {
                // 不管成功还是失败都会执行
                uni.hideLoading();
                uni.hideToast();
            }
        });
    }).catch((e) => {});
};

2、封装对应的 api 文件

在实际项目中,我们也会根据上述请求,封装对应的 api ,所以,我们在根目录下创建 api ,里面放与项目相关的 api

// 引入 request 文件
import request from '@/utils/request'
​
// 以下 api 为博主项目示例,实际与项目相匹配
​
// 分页查询学习列表
export const pageStudyInfo = (params) => {
    return request({
        url: '/study/studyInfo/page',
        method: 'get',
        data: params
    })
}
​
// 查询学习列表
export const listStudyInfo = (params) => {
    return request({
        url: '/study/studyInfo/list',
        method: 'get',
        data: params
    })
}
​
​
// 获取学习列表详细信息
export const studyInfoById= (id) => {
    return request({
        url: '/study/studyInfo/'+id,
        method: 'get',
    })
}
​
// 增加学习列表
export const saveStudyInfo = (params) => {
    return request({
        url: '/study/studyInfo',
        method: 'post',
        data: params
    })
}
​
// 修改学习列表
export const updateStudyInfo = (params) => {
    return request({
        url: '/study/studyInfo',
        method: 'put',
        data: params
    })
}
​
// 删除学习列表
export const deleteStudyInfo = (id) => {
    return request({
        url: '/study/studyInfo/delete?id='+id,
        method: 'delete',
    })
}
​

3、在相关页面使用 封装的 api (以 Vue3 为例)

<script setup>
    // 在页面中导入相关 api 
    import {pageStudyInfo,listStudyInfo} from "@/api/study/info";
​
    // 定义存储请求的结果
    const studyList = ref([]);
​
    // 也买你加载完毕执行
    onMounted(() => {
        // 调用函数
        getStudyList();
    })
    // 封装函数,调用 api
    const getStudyList = async () => {
        let res = await pageStudyInfo(queryParams);
        console.log(res.data.records);
        studyList.value = res.data.records;
    }
</script>

总结

封装请求是指在传输层或应用层对请求数据进行包装,以便在网络中传输和处理。封装请求的好处在于提高数据的安全性、减少网络传输的开销、方便协议的扩展和升级等。 在封装请求时,需要考虑请求的类型、格式、大小、传输协议、加密方式等因素。常见的封装请求的方式有URL编码、JSON格式、XML格式、HTTP协议等。 总之,封装请求是现代网络应用中非常重要的一个环节。通过良好的封装请求,可以保证数据的安全和可靠性,从而提高应用的性能和用户体验。

标签:uniapp,封装,url,request,params,uni,method
From: https://blog.51cto.com/u_16203259/7163415

相关文章

  • P1345 [USACO5.4] 奶牛的电信Telecowmunication 题解
    P1345[USACO5.4]奶牛的电信Telecowmunication题目描述农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流。这些机器用如下的方式发送电邮:如果存在一个由\(c\)台电脑组成的序列\(a_1,a_2,\cdots,a_c\),且\(a_1\)与\(a_2\)相连,\(a_2\)与......
  • UniRx操作符补充
    1.NextFrame2.DelayFrame3.FrameInterval4.BatchFrame5.ForEachAsync6.FrameTimeInterval7.SampleFrame8.RepeatUntilDestroy9.ObserveOnMainThread10.DelayFrameSubscript11.ThrottleFirstFrame12.ThrottleFrame13.TimeoutFrame14.TakeUntilDestroy15.TakeUnti......
  • Unit 2
    Unit2MistaketoSuccessAFamousQuoteSuccessisgoingfromfailuretofailurewithoutlosingyourenthusiasm.——WinstonChurchill成功就是经历一次一次失败后,热情依旧。......
  • Unit 6
    Unit6TheValueofMoneyTextATeachingChildrentoSpendPocketMoneyWiselyAFAMOUSQUOTENeverspendyourmoneybeforeyouhaveit.——ThomasJefferson钱财未到手,绝不提前花。......
  • a build cache key that uniquely defines the task’s outputs based on its inputs
    BuildCachehttps://docs.gradle.org/current/userguide/build_cache.htmlTheGradle buildcache isacachemechanismthataimstosavetimebyreusingoutputsproducedbyotherbuilds.Thebuildcacheworksbystoring(locallyorremotely)buildoutputsan......
  • 8-20|https://gitlab.xx.com/api/v4/projects/4/trigger/pipeline Request failed 状
    当你使用GitLabAPI并收到状态码400,这通常意味着你发送的请求是“坏的”或格式不正确。以下是一些建议,帮助你解决问题:1.**验证请求正文**:确保你提供的请求正文(如果有的话)是正确的并符合API的预期格式。对于触发管道的API,你可能需要提供有关分支、变量等的信息。2.**检查URL*......
  • Unity 物体围绕自身中心旋转而非轴心
    ============================================================在上面两张图坐标中心都在轴中心,但是如果用Rotate进行旋转,第一张是正确的,第二张进行了缩放的物体旋转并不会围绕自身中心旋转.解决的方法://相对于某一个点旋转//point相对于哪个点旋转//axis相对于point的......
  • Uni-App获取用户已安装应用列表
    //获取用户已装应用列表plus.android.importClass("java.util.ArrayList");plus.android.importClass("android.content.pm.PackageInfo");plus.android.importClass("android.content.pm.PackageManager");constApplicationInfo=plus.android.im......
  • Delphi XE UniGUI ExtJS [7] Delhi 动态添加 ClientEvents.ExtEvents 事件
    UniButton1.ClientEvents.ExtEvents.Values['click']:='function(sender){alert("Click")}';UniEdit1.ClientEvents.ExtEvents.Values['change']:='function(sender,newValue){UniForms.UniEdit2.setValue(newValue)}';Un......
  • uniapp APP微信登录、支付、分享以及支付宝支付 实战踩坑记录
    1、微信支付和支付宝支付  先上代码、封装好了的组件   html部分    <template> <viewclass="rows"> <!------------------------------充值的弹框开始------------------------------> <uni-popupclass="common-popup"ref="popupChongZhi":i......