【黑马程序员uniapp】项目配置、请求函数封装

黑马程序员前端项目uniapp小兔鲜儿微信小程序项目视频教程,基于Vue3+Ts+Pinia+uni-app的最新组合技术栈开发的电商业务全流程_哔哩哔哩_bilibili

参考

有代码,还有app、h5页面、小程序的演示

小兔鲜儿-vue3+ts-uniapp-一套代码多端部署: 小兔鲜儿-vue3+ts-uniapp 项目已上线,小程序搜索《小兔鲜儿》即可体验。🎉🎉🎉 <br/> 配套项目接口文档,配套笔记。

接口文档

说明 - 小兔鲜儿-小程序版

创建uni-app项目 

有HbuilderX创建项目和命令行创建项目两种方式

这里要创建uniapp项目,然后使用vscode开发

项目配置

微信小程序appid

安装依赖,运行 

pnpm i安装依赖,多个node_modules文件夹

然后运行pnpm dev:mp-weixin,mp表示mini program,微信小程序

编译完成的结果在dis目录下

打开微信小程序,导入mp-weixin

分离窗口

分离窗口,方便查看

使用uni-create-view插件

安装后进行设置 

配置好后,直接创建uniapp页面 

前一个是页面,后一个是页面路由pages路径名称 

完善ts类型校验

安装最新版本ts类型声明文件 

pnpm i -D miniprogram-api-typings@latest @uni-helper/uni-app-types@latest
// tsconfig.json
{"extends": "@vue/tsconfig/tsconfig.json","compilerOptions": {"sourceMap": true,"baseUrl": ".","paths": {"@/*": ["./src/*"]},"lib": ["esnext", "dom"],// 类型声明文件"types": ["@dcloudio/types", // uni-app API 类型"miniprogram-api-typings", // 原生微信小程序类型"@uni-helper/uni-app-types" // uni-app 组件类型]},// vue 编译器类型,校验标签类型"vueCompilerOptions": {// 原配置 experimentalRuntimeMode 已废弃,请升级 Vue - Official 插件至最新版本"plugins": ["@uni-helper/uni-app-types/volar-plugin"] },"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}

tsconfig报错

方法一:加上"ignoreDeprecations":"5.0"后重启

在 TypeScript 5.0 及以上版本中,importsNotUsedAsValues 和 preserveValueImports 选项已被弃用,并将在 TypeScript 5.5 中停止支持。取而代之的是使用 verbatimModuleSyntax 选项

如果希望继续使用旧版本的配置,可以在 tsconfig.json 中添加 ignoreDeprecations 选项,使编译器忽略弃用警告

"ignoreDeprecations":"5.0"

方法二:更新@vue/tsconfig 

使用命令查看vue/tsconfig版本

我的版本是0.1.3

pnpm list @vue/tsconfig

升级后重启

pnpm update @vue/tsconfig@^0.7.0

允许pages.json和manifest.json允许注释

在uniapp项目中,允许pages.json和manifest.json允许注释

但是vscode默认严格json 

只有这两个json文件允许注释

值jsonc,表示允许注释

manifest.json中两个值已弃用

两个值已弃用,所以默认false和0 

不用管

安装uni-ui

文档

uni-app官网

pnpm安装

配置easycom完成组件自动导入

开启自动扫描,在components文件夹是否有符合uniapp标准的组件,有就自动导入

但我们通过pnpm包管理器的方式下载,组件在node_modules里

所以这个配置走的是第二个custom正则的规则 

^表示开头,用()包裹.*,表示提取出这个组件的名字,()表示提取,提取的内容会把后面的$1替换

 // 组件自动引入规则"easycom": {// 是否开启自动扫描"autoscan": true,// 以正则方式自定义组件匹配规则"custom": {// uni-ui 规则如下配置"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue",// 以 Xtx 开头的组件,在 components 文件夹中查找引入(需要重启服务器)"^Xtx(.*)": "@/components/Xtx$1.vue"} 

为uni-ui提供ts类型

网站:  

@uni-helper/uni-types - npm

ts项目,希望类型更加安全 

但是鼠标悬停组件上是unknow

uni-ui开发时使用js,没有升级到ts

官方提供的组件库,并没有对应的类型声明文件

有人为uni-ui提供了配套的类型声明文件 

安装后需要增加类型声明文件 

"@uni-helper/uni-ui-types"

有了这个,我调用函数,就可以结构了 

小程序端pinia持久化 

文档:

配置 | Pinia Plugin Persistedstate

Pinia 用法与 Vue3 项目完全一致,uni-app 项目仅需解决持久化插件兼容性问题

插件默认使用 localStorage 实现持久化,小程序端不兼容,需要替换持久化 API

 安装持久化存储插件

pnpm i pinia-plugin-persistedstate

参考 

请求工具的封装 

拦截器

文档:

uni.addInterceptor(STRING, OBJECT) | uni-app官网

invoke函数会在拦截前触发 


设置请求基地址

如果首选服务器挂了,换成备用服务器,有基地址设置,只需要改一边就可以了

在项目中用到路径也更简洁


添加请求头标识

当前的小兔鲜服务端除了服务于小程序端,也会服务于pc端和app端

后端需要通过标记识别出数据请求的来源


添加token

用户登录后拿到token

流程 

拦截时,就会拿到uni.request()内部传来的参数

可以通过invoke()的形参获取

参数在ts项目中要指定类型,鼠标悬停到request上,得知参数类型

如果request在用的时候,也写上了header,这里写上的参数会覆盖options.header中的内容

因为options.header这里被赋值成新对象

所以,如果有要先保留,再添加特殊标识 

请求函数

封装请求函数,为了在项目中方便发请求,借鉴axios(axios返回值是Promise对象,配合async,await,能更方便地获取到请求成功的数据)

所以封装的请求函数也要求返回Promise对象

uniapp的拦截器没有axios拦截器完善,uniapp的响应拦截器对类型支持并不友好

所以前面的拦截器只完成了请求前的拦截,没有实现响应拦截器

要通过自己封装的请求函数去实现axios响应拦截器做过的业务(响应分为成功、失败)

流程

这里是Promise对象,所以更方便地用async,await去接收数据 


async/await 是建立在 Promise 之上的语法糖 。Promise 是 ES6 引入的异步编程解决方案,用于封装异步操作并获取其成功或失败结果。async 函数会自动返回一个 Promise 对象,await 关键字用于等待 Promise 对象的状态变为已解决(resolved )或已拒绝(rejected ),从而获取相应结果或处理错误

数据
封装抽离后端返回值的类型

后端返回的数据,变的只有result

所以可以封装抽离后端返回值的类型

类型断言 

返回的类型,uniapp中也有默认的联合类型,可以是string、AnyObject、ArrayBuffer

联合类型在这里是任意的对象类型AnyObject,但是有太大了

这里有更精确的类型,我们定义的Data<T>

在联合类型中指定其中一个类型,使用类型断言

获取数据失败

success()只有服务器有响应,都会走到这里面

如果服务器挂了,或者网络出错,才会走到fail()响应失败

如果没有token,但调用了一个需要携带token才能访问的接口,会走到success()响应成功里面。因为服务器有响应,响应的结果只不过是token失败

对于我们也页面中使用,业务理解会有差异


axios中的处理是只有响应状态码是2开头,才会调用resolve()

所以借鉴axios 

text、view标签报红错误提示

参考文档

vscode开发uniapp小程序,text、view标签报红错误提示 | Ayu's Study Blog

使用VSCode搭建UniApp + TS + Vue3 + Vite项目-阿里云开发者社区

我按照文档中说明,在.npmrc文件中增加了两项,再下载依赖,然后重启vscode就成功了 

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

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

相关文章

前端使用 preview 插件预览docx文件

目录 前言一 引入插件二 JS 处理 前言 前端使用 preview 插件预览docx文件 一 引入插件 建议下载至本地&#xff0c;静态引入&#xff0c;核心的文件已打包&#xff08;前端使用 preview 插件预览docx文件&#xff09;&#xff0c;在文章目录处下载至本地&#xff0c;复制在项…

如何在运动中保护好半月板?

文章目录 引言I 半月板的作用稳定作用缓冲作用润滑作用II 在跳绳运动中保护好半月板III 半月板损伤自测IV 半月板“杀手”半月板损伤必须满足四个因素:消耗品引言 膝盖是连接大腿骨和小腿骨的地方,在两部分骨头的连接处,垫着两片半月形的纤维软骨板,这就是半月板。半月板分…

安科瑞防逆流方案落地内蒙古中高绿能光伏项目,筑牢北疆绿电安全防线

一、项目概况 内蒙古阿拉善中高绿能能源分布式光伏项目&#xff0c;位于内蒙古乌斯太镇&#xff0c;装机容量为7MW&#xff0c;采用自发自用、余电不上网模式。 用户配电站为35kV用户站&#xff0c;采用两路电源单母线分段系统。本项目共设置12台35/0.4kV变压器&#xff0c;在…

1.3 fs模块详解

fs 模块详解 Node.js 的 fs 模块提供了与文件系统交互的能力&#xff0c;是服务器端编程的核心模块之一。它支持同步、异步&#xff08;回调式&#xff09;和 Promise 三种 API 风格&#xff0c;可满足不同场景的需求。 1. 模块引入 const fs require(fs); // 回调…

LeetCode 70 爬楼梯(Java)

爬楼梯问题&#xff1a;动态规划与斐波那契的巧妙结合 问题描述 假设你正在爬楼梯&#xff0c;需要爬 n 阶才能到达楼顶。每次你可以爬 1 或 2 个台阶。求有多少种不同的方法可以爬到楼顶&#xff1f; 示例&#xff1a; n 2 → 输出 2&#xff08;1阶1阶 或 2阶&#xff0…

【学习分享】shell基础-参数传递

参数传递 我们可以在执行 Shell 脚本时&#xff0c;向脚本传递参数&#xff0c;脚本内获取参数的格式为 $n&#xff0c;n 代表一个数字&#xff0c;1 为执行脚本的第一个参数&#xff0c;2 为执行脚本的第二个参数。 例如可以使用 $1、$2 等来引用传递给脚本的参数&#xff0…

Fluence推出“Pointless计划”:五种方式参与RWA算力资产新时代

2025年6月1日&#xff0c;去中心化算力平台 Fluence 正式宣布启动“Pointless 计划”——这是其《Fluence Vision 2026》战略中四项核心举措之一&#xff0c;旨在通过贡献驱动的积分体系&#xff0c;激励更广泛的社区参与&#xff0c;为用户带来现实世界资产&#xff08;RWA&am…

Excel数据分析:基础

在现代办公环境中&#xff0c;Excel 是一款不可或缺的工具&#xff0c;它是 Microsoft&#xff08;微软&#xff09;开发的电子表格软件&#xff0c;用于处理和分析结构化数据。市场上还有其他类似的软件&#xff0c;如 Google Sheets 和 Apple Numbers&#xff0c;但 Excel 以…

12V降5V12A大功率WD5030A,充电器、便携式设备、网络及工业领域的理想选择

WD5030A 高效单片同步降压型直流 / 直流转换器 一、芯片核心概述 WD5030A 是一款高性能同步降压型 DC/DC 转换器&#xff0c;采用 平均电流模式控制架构&#xff08;带频率抖动功能&#xff09;&#xff0c;具备以下核心优势&#xff1a; 精准电流控制&#xff1a;快速响应负…

企业级AI迈入黄金时代,企业该如何向AI“蝶变”?

科技云报到原创。 近日&#xff0c;微软&#xff08;MSFT.US&#xff09;在最新全员大会上高调展示企业级AI业务进展&#xff0c;其中与巴克莱银行达成的10万份Copilot许可证交易成为焦点。 微软首席商务官贾德森阿尔索夫在会上披露&#xff0c;这家英国金融巨头已签约采购相…

Java编程课(一)

Java编程课 一、java简介二、Java基础语法2.1 环境搭建2.2 使用Intellij IDEA新建java项目2.3 Java运行介绍2.4 参数说明2.5 Java基础语法2.6 注释2.7 变量和常量一、java简介 Java是一种广泛使用的高级编程语言,最初由Sun Microsystems于1995年发布。它被设计为具有简单、可…

【Java Web】速通Tomcat

参考笔记:JavaWeb 速通Tomcat_tomcat部署java项目-CSDN博客 目录 一、Tomcat服务 1. 下载和安装 2. 启动Tomcat服务 3. 启动Tomcat服务的注意事项 4. 关闭Tomcat服务 二、Tomcat的目录结构 1. bin 🌟 2. conf 🌟 3. lib 4. logs 5. temp 6. webapps 7. work 三、Web项目…

Mysql 身份认证绕过漏洞 CVE-2012-2122

前言&#xff1a;CVE-2012-2122 是一个影响 MySQL 和 MariaDB 的身份验证漏洞&#xff0c;存在于特定版本中 vulhub/mysql/CVE-2012-2122/README.zh-cn.md at master vulhub/vulhubhttps://github.com/vulhub/vulhub/blob/master/mysql/CVE-2012-2122/README.zh-cn.md 任务一…

Win10停更,Win11不好用?现在Mac电脑比Win11电脑更便宜

最近不少朋友在换电脑前都犯了难。 以前大家最常说的一句是&#xff1a;“Mac太贵了&#xff0c;还是买Windows吧。”但现在不一样了&#xff0c;国补教育优惠下来&#xff0c;新款M4芯片的Mac mini的入门价已经降到了3000元左右&#xff0c;曾经的价格壁垒&#xff0c;已经不…

C#中Struct与IntPtr转换:实用扩展方法

C#中Struct与IntPtr转换&#xff1a;实用扩展方法 在 C# 编程的世界里&#xff0c;我们常常会遇到需要与非托管代码交互&#xff0c;或者进行一些底层内存操作的场景。这时&#xff0c;IntPtr类型就显得尤为重要&#xff0c;它可以表示一个指针或句柄&#xff0c;用来指向非托…

手机归属地查询接口如何用Java调用?

一、什么是手机归属地查询接口&#xff1f; 是一种便捷、高效的工具&#xff0c;操作简单&#xff0c;请求速度快。它不仅能够提高用户填写地址的效率&#xff0c;还能帮助企业更好地了解客户需求&#xff0c;制定个性化的营销策略&#xff0c;降低风险。随着移动互联网的发展…

43、视图解析-Thymeleaf初体验

43、视图解析-Thymeleaf初体验 “43、视图解析-Thymeleaf初体验”通常是指在学习Spring Boot框架时&#xff0c;关于如何使用Thymeleaf模板引擎进行视图解析的入门课程或章节。以下是对该主题的详细介绍&#xff1a; #### Thymeleaf简介 - **定义**&#xff1a;Thymeleaf是一个…

Day 40训练

Day 40 训练 PyTorch 图像数据训练与测试的规范写法单通道图像的规范训练流程数据预处理与加载模型定义训练与测试函数封装模型训练执行 彩色图像的扩展应用数据预处理调整模型结构调整 关键要点总结 知识点回顾&#xff1a; 彩色和灰度图片测试和训练的规范写法&#xff1a;封…

杰理可视化SDK--系统死机异常调试

杰理可视化SDK--系统死机异常调试 系统异常原因杰理SDK异常调试准备工作杰理SDK系统异常定位异常代码示例1异常代码示例2 在使用杰理可视化SDK进行软件开发时&#xff0c;往往会遇到一些系统异常问题&#xff0c;系统异常是指芯片在运行代码时&#xff0c;由于软件或硬件状态出…

图简记。。

模仿&#xff1a; algorithm-journey/src/class059/Code01_CreateGraph.java at main algorithmzuo/algorithm-journey Code01_CreateGraph C语言&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAXN 11 #define MAX…