首页 > 其他分享 >uniApp:使用vue3+Vite4+pinia+sass技术栈构建(02)-封装api请求

uniApp:使用vue3+Vite4+pinia+sass技术栈构建(02)-封装api请求

时间:2023-11-06 18:32:56浏览次数:42  
标签:02 uniApp sass service header url request URL user

前言

在纯vue3开发的时候,使用axios进行api请求,但在uniapp中还需要安装axios的适配器uniapp-axios-adapter,否则小程序或者app请求不兼容。文档地址uniapp-axios-adapter - DCloud 插件市场

但在这里我们不使用axios,而是使用uniapp提供的请求方法 uni.request 进行封装。uni.request方法链接

开始封装

最终目录

uniApp:使用vue3+Vite4+pinia+sass技术栈构建(02)-封装api请求_uniapp

1.创建请求文件   

/src/service/service.ts -基础访问类

/src/service/api.ts -对外提供接口访问

/src/service/module/user.ts -文件夹存放每个模块的访问接口

2.首先创建基础访问类

service.ts

import { useStore } from "@/store/user"  //引入pinia 获取用户登录后的token

//通过env文件,区分开发环境和正式环境
if (import.meta.env.MODE === "development") {
    BASE_URL = import.meta.env.VITE_DEV_URL
} else {
    BASE_URL = import.meta.env.VITE_PRO_URL
}

const isUrl = (url: string) => {
    let rx = /^http?/i
    if (rx.test(url)) {
        return true
    } else {
        return false
    }
}

//定义请求类型
enum methodtType {
    GET = "GET",
    OPTIONS = "OPTIONS",
    HEAD = "HEAD",
    POST = "POST",
    PUT = "PUT",
    GDELETEET = "DELETE",
    TRACE = "TRACE",
    CONNECT = "CONNECT",
}
//请求类
class urlRequest {
    header = {
        PCTOKEN: useStore().userInfo.token  //登录token,key根据实际情况修改
    }
    setHeader(header: any) {  //提供修改header的方法,不过不需要可以删除
        this.header = header
    }
    request(
        url: string,
        method: methodtType,
        params: Array<String> = [],
        showError: boolean = true  //可以不要,留在这里的意思是出错信息要不要再基类中处理,例如需要登录的接口没有登录,提示用户登录
    ) {
        let request_url = url
        if (!isUrl(url)) {  // 判断一下传过来的地址是带有域名还是不带有域名,提高代码的扩展性。
            request_url = BASE_URL + url
        }
        return new Promise((resolve, reject) => {
            uni.request({
                url: request_url,
                method: method || "GET",
                header: this.header,
                data: params,
                success: (res: any) => {
                    resolve(res.data)
                    if (showError) {

                    }
                },
                fail: (err) => {
                    reject(err)
                },
            })
        })
    }
    /**
    *检查网络
    */
    getNetworkType() {
        //判断是否有网络
        uni.getNetworkType({
            success: function (res) {
                if (res.networkType === "none") {
                    uni.showToast({
                        icon: "none",
                        title: "网络异常,请检测网络配置!",
                        duration: 2000,
                    })
                }
            },
        })

    }
    get(url: string, params: any = []) {
        this.getNetworkType()
        return this.request(url, methodtType.GET, params)
    }
    post<T = any>(url: string, data: any = [], showError: boolean = true) {
        this.getNetworkType()
        return this.request(url, methodtType.POST, data, showError) as unknown as T
    }
    //还可以添加methodtType类型中的方法,如果有需要。
}
export default new urlRequest()
3.创建每个模块的访问接口 user.ts
import service from "../service"
const user = {
    getUserInfo() {
        return service.post("/api/getUserInfo", {})
    }
}
export default user
4.创建api.ts
import user from "./module/user"

export {
    user
}
5.页面调用接口
<template>
	<view class="content">
		<image class="logo" src="/static/logo.png" />
		<view class="text-area">
			<text class="title">{{ title }}-{{ userInfo.userInfo.username }}</text>
		</view>
	</view>
</template>

<script setup lang="ts">
import { ref } from "vue"
import { useStore } from "@/store/user"
import { user } from "@/service/api"
const userInfo = useStore()
user.getUserInfo().then((res: any) => {
	userInfo.setUserInfo(res.datas)
})
const title = ref("Hello")
</script>

主意:

uniApp:使用vue3+Vite4+pinia+sass技术栈构建(02)-封装api请求_请求封装_02

service.ts 中使用到了.env  ,和src同级目录,不在src里面,不在src里面

# 开发环境
VITE_DEV_URL='https://www.fastmock.site/mock/89a2cebcedc1f69e1d57f0b89ab28500/test'

# 正式环境
VITE_PRO_URL=''


标签:02,uniApp,sass,service,header,url,request,URL,user
From: https://blog.51cto.com/u_3692993/8215761

相关文章

  • 清华交叉信息研究院2024届推免拟录取名单
    直博生硕士分析清华交叉信息研究院在推免中共录取直博生41人,其中081200计算机科学与技术24人,物理学17人;共录取硕士生7人,都是081200计算机科学与技术专业本文由博客一文多发平台OpenWrite发布!......
  • 2023第十届国际地下空间开发大会
    地下空间的开发利用是全球公认的城市可持续发展的解决方案之一。党的二十大报告强调,坚持人民城市人民建,人民城市为人民,提高城市规划、建设、治理水平,加快转变超大特大城市发展方式,建设人与自然和谐相处、共生共荣的宜居城市,为未来城市发展指明了方向。地下空间作为城市规划建设的重......
  • 清华交叉信息研究院2024届推免拟录取名单
    直博生硕士分析清华交叉信息研究院在推免中共录取直博生41人,其中081200计算机科学与技术24人,物理学17人;共录取硕士生7人,都是081200计算机科学与技术专业本文由博客一文多发平台OpenWrite发布!......
  • 2023.10月-助教总结报告
    一、助教工作的具体职责和任务      1、批改同学作业      2、及时解答同学们的问题。当同学们对于作业提出疑问时,能够及时进行解答,帮助同学们加深对知识的理解。3、在实验室排错二、助教工作的每周时长和具体安排每周时长:6小时具体安排:每周批改作业和为......
  • 2023-11-06 如何打包Electron项目(未完待续)
    运行打包命令:npmrunmake如图: 打包成功后的目录: 这个名为out的就是打包后的文件所在的地方 my-app-elec-win32-x64为可分发的文件夹 双击它,即可启动! 现在你看到的是运行npmrunmake打包后的开发包,我们接下来要用一个工具(electron-windows-store)来对这个包编......
  • P3202 [HNOI2009] 通往城堡之路
    考虑将每个支撑点都先设成其下限高度,即\(h_i\getsh_1-(i-1)\timesd\),这样就只会提高某些支撑点的高度。显然每次提高的是一个后缀。提高某个后缀的贡献是当前高度低于原先高度的支撑点数量减去当前高度不低于原先高度的支撑点数量。选择贡献最大的后缀直到最后一个支撑点的高......
  • 2023CVPR_Spatial-Frequency Mutual Learning for Face Super-Resolution
    一.Network:SFMNet1.网络采用U-Net结构,其中SFMLM-i是不同分辨率的每层结构2.SPB是空域分支,FRB是频域分支,分别经过FRB和SPB的两个分支信息经过FSIB分支进行信息的融合3.FRB结构:classFreBlock9(nn.Module):def__init__(self,channels,args):super(FreBlo......
  • uniapp+微信小程序 激励广告
    防忘首先在onready里面准备好代码 包括广告准备就绪 准备出错,广告关闭data(){return{showAd:false,canShowAd:false,rewardedVideoAd:null,}},onReady()......
  • 从零开始构建报警中心:part02 使用python脚本接收zabbix报警信息-2
    在上篇中完成了对报警媒介与动作的配置在动作配置中,有一项是发送到配置,这个需要配置到用户与报警媒介之间进行绑定。具体操作如下点击“管理”-》“用户”,点击要操作的用户再点击“报警媒介”,点击“添加”进行操作在弹出的对话框上点选类型,选择之前对应配置的报警媒介,并添加。如果......
  • 2023-8-24 Quantom Computational Advantage Using Pertons 光量子计算优越性 2023人
    QuantomComputationalAdvantageUsingPertons光量子计算优越性|2023人工智能大会青年科学家论坛钟瀚森上海人工智能实验室论文背景:量子计算有望在许多重要任务上实现超越经典的计算能力。但长期以来受限于实验技术,无法在实际任务上演示超越经典计算机的性能。论文成......