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

article/2025/6/23 21:58:34

黑马程序员前端项目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.hkcw.cn/article/jprOOGJwYZ.shtml

相关文章

数据库系统概论(十三)详细讲解SQL中数据更新(插入,修改与更新)

数据库系统概论&#xff08;十三&#xff09;详细讲解SQL中数据更新 前言一、数据插入1. 插入数据是什么&#xff1f;2.插入单条数据&#xff08;插入元组&#xff09;场景 1&#xff1a;指定部分列插入场景 2&#xff1a;不指定列名&#xff08;插入所有列&#xff09;场景 3&…

电磁场与电磁波公式汇总

考前四天速成的&#xff0c;有些地方还理解不到位&#xff0c;欢迎交流指正

现代汽车电气/电子(E/E)架构集中化评估的系统方法

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

指挥中心系统建设与应用方案PPT(46页)

引言 指挥中心系统作为城市应急管理的核心&#xff0c;在现代社会治理中发挥着至关重要的作用。本文旨在探讨指挥中心系统的建设与应用&#xff0c;为打造现代化、智慧化的城市应急管理体系提供参考。 指挥中心系统建设背景 自然灾害、事故灾难等突发事件频发&#xff0c;给…

Jony Ive联手Powell Jobs:OpenAI神秘硬件能否重塑科技?探讨合作与愿景

金融时报发布了一篇文章,采访了前苹果首席设计官乔纳森・伊夫和乔布斯遗孀劳伦・鲍威尔・乔布斯。他们讨论了合作关系、对科技社会影响的担忧,以及OpenAI正在开发的神秘硬件设备。乔纳森・伊夫曾负责设计iMac、iPod、iPhone等产品,而劳伦・鲍威尔・乔布斯是史蒂夫・乔布斯的…

Idea快捷键

ctrl f12: 显示当前类所有方法&#xff1a; -> 这个方法来自于哪个类或者接口中 | 重写了父类或接口的方法 compute继承了map&#xff0c;&#xff0c;又重写了这个方法&#xff1a; f黄色开头的&#xff1a; 是当前类的属性&#xff0c;有可能是成员变量&#xff0c;也有…

2天后决战印尼!伊万:我一直保持乐观 对印尼我们会积极争胜 备战顺利状态佳

中国男足国家队于2日晚抵达印度尼西亚首都雅加达,准备参加5日在这里举行的2026美加墨世界杯亚洲区预选赛18强赛第9轮对阵印尼队的关键战。当地时间晚上10点30分,中国队在主教练伊万科维奇的带领下走出雅加达苏加诺-哈达国际机场,随后登上大巴前往酒店。伊万科维奇在接受采访…

女子离婚后前夫过节仍来送礼 让她重新给个机会

女子离婚后前夫过节仍来送礼,让她重新给个机会。0102我朋友也是这样,离婚后前夫突然变得殷勤,又是送花又是转账,说想复婚。当初结婚的时候连生日礼物都懒得买,现在装什么深情。这种人就是失去才知道珍惜,但已经晚了。0304在商场看到前夫给我买了个包,还转了5200,说想复…

1. 前言与安装pytorch、d2l

书本电子版&#xff1a;https://zh.d2l.ai/index.html 前言 神经网络是深度学习前身 全书结构&#xff1a; 第一部分包括基础知识和预备知识。 1节提供深度学习的入门课程。然后在 2节中&#xff0c;我们将快速介绍实践深度学习所需的前提条件&#xff0c;例如如何存储和处理…

Mary Meeker带着340页AI报告回来了 AI发展速度前所未有

当地时间5月30日,玛丽米克尔发布了长达340页的“AI趋势报告”。报告指出,AI的发展速度前所未有,用户增长、使用量和资本支出均呈现出爆炸式增长,其影响力可能远超技术本身。玛丽米克尔是美国风险投资家,曾就职于摩根士丹利和凯鹏华盈,于2018年创立了自己的风投公司邦德资…

六一档“遗憾”复盘:票房小爆,但谷子不行 谷子经济待加强

六一档“遗憾”复盘:票房小爆,但谷子不行 谷子经济待加强!2025年端午档传来好消息,截至6月2日19点,档期三天总票房达到4.48亿元,观影人次1145万,两项指标均大幅超越去年同档,为暑期档打响了前哨站。今年春节档刷新高票房纪录后,清明档和五一档因缺少爆款影片而连续下滑…

爱琴海5.8级地震 震源深度80千米

爱琴海5.8级地震 震源深度80千米!中国地震台网正式测定:6月3日7时17分在爱琴海(北纬36.55度,东经28.20度)发生5.8级地震,震源深度80千米。责任编辑:0882

企图说服父母提升信心:国米球迷为了让小因继续执教,真的是拼了 横幅挽留显真情

国米球迷在小因扎吉老家拉横幅,希望他留在国米执教。此前,小因扎吉率领的国米在欧冠决赛中以0-5惨败,目前有关他可能离开国米前往利雅得新月执教的消息也不断传出。在小因扎吉的老家皮亚琴察省圣尼科洛,有国米球迷挂出横幅表达对他的支持。横幅上写着:“我们一起跌倒,一起…

今年人形机器人赛道已涌进超180亿元 资本狂热期来临

今年人形机器人赛道已涌进超180亿元 资本狂热期来临!中国和美国正在竞逐AI与人形机器人的未来。在上海浦东张江的一座大型仓库里,数十台人形机器人每天进行长达17小时的数据采集,执行折叠T恤、制作三明治和开门等任务,以提升智元人形机器人的操作准确性。与此同时,特斯拉公…

车载网关框架 --- 网关外部IP转内部IP的所有流程

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

【多线程初阶】内存可见性问题 volatile

文章目录 再谈线程安全问题内存可见性问题可见性问题案例编译器优化 volatileJava内存模型(JMM) 再谈线程安全问题 如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该有的结果,则说这个程序是线程安全的,反之,多线程环境中,并发执行后,产生bug就是线程不安全…

YOLO机械臂丨使用unity搭建仿真环境,YOLO算法识别,Moveit2控制

文章目录 前言搭建开发环境在window中安装Unity创建Docker容器&#xff0c;并安装相关软件运行测试改进添加删除节点前的函数调用 报错❌框选节点的时候报错❌如果无法控制机械臂&#xff0c;查看rviz2的终端&#xff0c;应该会有❌规划路径超出范围 参考 前言 本项目介绍通过…

论文略读:Auto-Regressive Moving Diffusion Models for Time Series Forecasting

AAAI 2025 在这篇论文中&#xff0c;时间序列的演进&#xff08;)被概念化为一个扩散过程 时间序列的每一步都可以看成是扩散模型的一个状态未来序列&#xff08;下标表示在序列中的位置&#xff0c;上标表示在扩散模型中的状态&#xff09;作为前向扩散&#xff08;演进&…

外卖小哥误入工地1个多小时没能出来 最终只能报警求助

近日,一名外卖小哥在送外卖时,为节约时间,跟着导航抄小路,没想到自己看错了路线,被困在了一个在建工地内1个多小时,最终只能报警求助。责任编辑:zx0002

贾冰瘦了 少吃多动见成效

5月31日,演员贾冰的妻子发布了一段视频,祝福大家端午节快乐,并配文“从此我家多了个瘦子”。两人合影中,贾冰明显瘦了很多。评论区里,很多人询问他如何瘦下来,甚至有人表示他瘦得认不出来了。贾冰妻子回复说,主要是通过少吃和运动来达到减肥效果,有时候一天只吃一顿饭。…