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

news2025/6/5 10:28:56

黑马程序员前端项目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.coloradmin.cn/o/2397096.html

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

相关文章

PyTorch——DataLoader的使用

batch_size, drop_last 的用法 shuffle shuffleTrue 各批次训练的图像不一样 shuffleFalse 在第156step顺序一致

Predixy的docker化

概述 当前已有一套redis cluster的集群&#xff0c;但是fs中的hiredis只能配置单实例redis。 AI了一下方案&#xff0c;可以使用redis的proxy组件来实现从hiredis到redis cluster的互通。 代码地址&#xff1a;https://github.com/joyieldInc/predixy Predixy特性介绍&…

C++ 之 多态 【虚函数表、多态的原理、动态绑定与静态绑定】

目录 前言 1.多态的原理 1.1虚函数表 1.2派生类中的虚表 1.3虚函数、虚表存放位置 1.4多态的原理 1.5多态条件的思考 2.动态绑定与静态绑定 3.单继承和虚继承中的虚函数表 3.1单继承中的虚函数表 3.2多继承(非菱形继承)中的虚函数表 4.问答题 前言 需要声明的&#x…

【JavaWeb】Maven、Servlet、cookie/session

目录 5. Maven6. Servlet6.1 Servlet 简介6.2 HelloServlet6.3 Servlet原理6.4 Mapping( **<font style"color:rgb(44, 44, 54);">映射 ** )问题6.5 ServletContext6.6 HttpServletResponse<font style"color:rgb(232, 62, 140);background-color:rgb(…

Rust 编程实现猜数字游戏

文章目录 编程实现猜数字游戏游戏规则创建新项目默认代码处理用户输入代码解析 生成随机数添加依赖生成逻辑 比较猜测值与目标值类型转换 循环与错误处理优化添加循环优雅处理非法输入​ 最终完整代码核心概念总结 编程实现猜数字游戏 我们使用cargo和rust实现一个经典编程练习…

关于神经网络中的激活函数

这篇博客主要介绍一下神经网络中的激活函数以及为什么要存在激活函数。 首先&#xff0c;我先做一个简单的类比&#xff1a;激活函数的作用就像给神经网络里的 “数字信号” 加了一个 “智能阀门”&#xff0c;让机器能学会像人类一样思考复杂问题。 没有激活i函数的神经网络…

CentOS_7.9 2U物理服务器上部署系统简易操作步骤

近期单位网站革新&#xff0c;鉴于安全加固&#xff0c;计划将原有Windows环境更新到Linux-CentOS 7.9&#xff0c;这版本也没的说&#xff08;绝&#xff09;了&#xff08;版&#xff09;官方停止更新&#xff0c;但无论如何还是被sisi的牵挂着这一大批人&#xff0c;毕竟从接…

短视频平台差异视角下开源AI智能名片链动2+1模式S2B2C商城小程序的适配性研究——以抖音与快手为例

摘要 本文以抖音与快手两大短视频平台为研究对象&#xff0c;从用户群体、内容生态、推荐逻辑三维度分析其差异化特征&#xff0c;并探讨开源AI智能名片链动21模式与S2B2C商城小程序在平台适配中的创新价值。研究发现&#xff0c;抖音的流量中心化机制与优质内容导向适合品牌化…

【笔记】Windows 下载并安装 ChromeDriver

以下是 在 Windows 上下载并安装 ChromeDriver 的笔记&#xff1a; ✅ Windows 下载并安装 ChromeDriver 1️⃣ 确认 Chrome 浏览器版本 打开 Chrome 浏览器 点击右上角 ︙ → 帮助 → 关于 Google Chrome 记下版本号&#xff0c;例如&#xff1a;114.0.5735.199 2️⃣ 下载…

Spark-Core Project

RDD转换算子总结 RDD转换算子分为Value类型、双Value类型和Key - Value类型。 1、Value类型 map&#xff1a;对数据逐条映射转换&#xff0c;可改变数据类型或值。如 dataRDD.map(num > num * 2 运行结果&#xff1a; 2&#xff09;mapPartitions&#xff1a;以分区为单位处…

Wireshark 使用教程:让抓包不再神秘

一、什么是 tshark&#xff1f; tshark 是 Wireshark 的命令行版本&#xff0c;支持几乎所有 Wireshark 的核心功能。它可以用来&#xff1a; 抓包并保存为 pcap 文件 实时显示数据包信息 提取指定字段进行分析 配合 shell 脚本完成自动化任务 二、安装与验证 Kali Linux…

JWT安全:接收无签名令牌.【签名算法设置为none绕过验证】

JWT安全&#xff1a;假密钥【签名随便写实现越权绕过.】 JSON Web 令牌 (JWT)是一种在系统之间发送加密签名 JSON 数据的标准化格式。理论上&#xff0c;它们可以包含任何类型的数据&#xff0c;但最常用于在身份验证、会话处理和访问控制机制中发送有关用户的信息(“声明”)。…

白银价格查询接口如何用Java进行调用?

一、什么是白银价格查询接口&#xff1f; 它聚焦于上海黄金交易所、上海期货交易所等权威市场&#xff0c;精准提供白银价格行情数据&#xff0c;助力用户实时把握市场脉搏&#xff0c;做出明智的投资决策。 二、应用场景 分析软件&#xff1a;金融类平台可以集成本接口&…

FreeBSD 14.3 候选版本附带 Docker 镜像和关键修复

新的月份已经到来&#xff0c;FreeBSD 14.3 候选发布版 1 现已开放测试&#xff0c;它带来了一些您可能会觉得有用的更新&#xff0c;特别是如果您对Docker容器感兴趣的话。RC1 版本中一个非常受欢迎的改进是&#xff0c;FreeBSD 项目已开始将官方开放容器计划 (OCI) 镜像发布到…

「Java教案」算术运算符与表达式

课程目标 1&#xff0e;知识目标 能够区分Java运算符的种类&#xff0c;例如&#xff0c;算术、赋值、关系、逻辑、位运算等。能够区分Java各类运算符的功能和使用场景。能够根据表达式的构成和计算规则&#xff0c;写出正确的表达式。能够根据运算符优先级与结合性&#xff…

论文写作核心要点

不要只读论文里的motivation和method 论文里的图表和统计特征 在论文里找到具有统计意义的东西&#xff0c;那么在语料里也肯定遵循这样的规律&#xff0c;我们就能用机器学习的方法&#xff0c; 我们再用不同方法解决&#xff0c;哪种方法好&#xff0c;就用哪种 实验分析 …

[java]eclipse中windowbuilder插件在线安装

目录 一、打开eclipse 二、打开插件市场 三、输入windowbuilder&#xff0c;点击install 四、进入安装界面 五、勾选我同意... 重启即可 一、打开eclipse 二、打开插件市场 三、输入windowbuilder&#xff0c;点击install 四、进入安装界面 五、勾选我同意... 重启即可

Ubuntu20.04服务器开启路由转发让局域网内其他电脑通过该服务器连接外网

要让你的 Ubuntu作为路由器&#xff0c;通过 Wi-Fi 上网&#xff0c;并给连接到 UsbNetwork 的设备提供网络&#xff0c;需要做以下配置&#xff1a; 1. 网络拓扑 [互联网] ← (Wi-Fi, wlo1) → [Ubuntu] ← (USB网络/USB以太网, UsbNetwork) → [设备]Ubuntu&#xff1a; Wi-…

【Oracle】TCL语言

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. TCL概述1.1 什么是TCL&#xff1f;1.2 TCL的核心功能 2. 事务基础概念2.1 事务的ACID特性2.2 事务的生命周期 3. COMMIT语句详解3.1 COMMIT基础语法3.2 自动提交与手动提交3.3 提交性能优化 4. ROLLBACK语句…

Windows | 总误按Num Lock?修改注册表永久禁用Numlk键使小键盘一直输入数字

先说需修改注册表的位置与键值 路径&#xff1a;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\ 二进制键&#xff1a;Scancode Map 键值&#xff1a; 00 00 00 00 00 00 00 00 01 00 00 00 00 00 45 00 00 00 00 00 00 00 00 00如下图&#xff1a; …