Vue3(管理系统)-封装axios(utils)

一、在utils下编写request.js实例

1.添加基地址,设置超时时间

import axios from 'axios'
const baseURL = 'http://big-event-vue-api-t.itheima.net'
const instance = axios.create({
  // TODO 1. 基础地址,超时时间
  baseURL,
  timeout: 3000
})

2.添加请求拦截器

import { useUserStore } from '@/store'
// 添加请求拦截器

axios.interceptors.request.use(
  function (config) {
    //     // config:
    // 在发送请求之前做些什么
    //携带token
    const userStore = useUserStore()
    if (userStore) {
      config.headers.Authorization = userStore.token
    }
    return config
  },
  function (error) {
    // 对请求错误做些什么

    return Promise.reject(error)
  }
)

3.添加响应拦截器

import { ElMessage } from 'element-plus'
//这里是element-plus的导入消息框

import router from '@/router'




//弹窗提示
const open4 = () => {
  ElMessage({
    message: 'response.data.message ' || '请求失败,请稍后再试',
    type: 'error',
    plain: true
  })
} 

// 添加响应拦截器
axios.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    if (response.data.code === 0) {
      return response
    }
    // 处理业务失败抛出错误常规
    open4()
    return Promise.reject(response.data)
  },
  function (error) {
    // 对响应错误做点什么
    // 默认错误
    ElMessage({
      message: error.response.data.message || '服务异常',
      type: 'error',
      plain: true
    })
    console.log(error)
    // 401错误,权限不足,token过期,跳转登录
    //?表示可选链
    if (error.response?.status === 401) {
      // 跳转登录
      router.push('/login')
    }
    return Promise.reject(error)
  }
)
export default instance
export { baseURL }

最后导出

二、可选链(扩展)

可选链(Optional Chaining)是编程语言中的一种特性,它允许你访问对象的嵌套属性,即使这些属性可能未被初始化或不存在。在 JavaScript 或 TypeScript 中,可选链的语法使用问号 ?. 来表示。

以下是可选链的一些常见用法:

  1. 访问对象的嵌套属性

     

    const obj = { foo: { bar: { baz: 'Hello World' } } }; // 使用可选链 const baz = obj?.foo?.bar?.baz; // "Hello World" // 不使用可选链,如果任一属性不存在,将导致错误 const baz = obj.foo.bar.baz; // 如果 obj.foo 或 obj.foo.bar 不存在,将抛出错误

  2. 函数调用: 如果一个函数可能不存在,使用可选链可以避免错误:

     

    const obj = { doSomething: () => console.log('Doing something') }; // 使用可选链调用函数 obj?.doSomething?.(); // "Doing something" // 如果 doSomething 不存在,不会抛出错误

  3. 与解构结合使用

     

    const obj = { foo: { bar: 42 } }; // 使用可选链进行解构 const { foo: { bar } = 0 } = obj; // 使用可选链进行解构,避免错误 const { foo: { bar } = 0 } = someUnknownObject;

  4. 链式调用

     

    const obj = { foo: { bar: () => 'Hello World' } }; // 使用可选链进行链式调用 const result = obj?.foo?.bar?.(); // 如果 foo 或 bar 不存在,result 将是 undefined 而不是抛出错误

  5. 条件表达式

     

    const obj = { foo: { bar: 'baz' } }; // 使用可选链进行条件表达式 const value = obj?.foo?.bar || 'default'; // value 将是 'baz',如果 obj.foo 或 obj.foo.bar 不存在,将是 'default'

可选链是一个非常有用的特性,它可以减少代码中的条件检查,使代码更加简洁。然而,它也可能导致一些微妙的错误,因为可选链返回 undefined 而不是抛出错误,所以使用时需要仔细考虑逻辑。

三、

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在Ubuntu linux操作系统上操作MySQL数据库常用的命令

检查是否安装了MySQL,或检查MySQL的状态: sudo systemctl status mysql或 sudo systemctl status mysql.service如果mysql有安装,上面这条命令会返回mysql的状态active或inactive。 卸载mysql数据库 第一步是停了数据库: sud…

【SQL Server】入门教程-基础篇(三)

目录 前言 SQL 常用函数学习 AVG – 平均值 COUNT – 汇总函数 ​编辑MAX – 最大值 ​编辑MIN – 最小值 ​编辑SUM – 求和 UCASE/UPPER – 大写 LCASE/LOWER – 小写 ROUND – 数值取舍 NOW/SYSDATE – 当前时间 前言 这一篇博客,是Sql Server函数学…

Spring MVC入门程序

SpringMVC入门程序 一、实现思路 掌握Spring MVC入门程序,能够实现入门程序的编写 二、编码实现 1、新建项目 项目:maven,原型:maven-archetype-webapp,GroupID:com.sw 引入pom依赖 2、补充项目目录 src…

# 从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(3)

从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(3) 一、hystrix:通过 Actuator 获取 hystrix 的监控数据 1、Hystrix 的监控平台介绍: 1)Hystrix 除了实现容错功能,Hystrix 还…

vue3中使用crypto-js库进行加密/解密

使用crypto-js库进行加密/解密 安装 npm install crypto-js 基本使用 <template><div>使用crypto-js库进行加密/解密</div> </template><script setup> import CryptoJS from crypto-js; import { onMounted } from vue;// 加密函数 const encr…

监视器和显示器的区别,普通硬盘和监控硬盘的区别

监视器与显示器的区别&#xff0c;你真的知道吗&#xff1f; 中小型视频监控系统中&#xff0c;显示系统是最能展现效果的一个重要环节&#xff0c;显示系统的优劣将直接影响视频监控系统的用户体验满意度。 中小型视频监控系统中&#xff0c;显示系统是最能展现效果的一个重要…

UDP!!!

UDP!!! 一 : 传输层的协议:二 : UDP2.1 UDP长度2.2 UDP校验和2.2.1 : 为什么会出现传输出错的情况??2.2.3: 对数据进行校验的方式CRCmd5 三 : UDP的适用场景 一 : 传输层的协议: 传输层的协议有UDP,TCP UDP:无连接,不可靠传输,面向数据报,全双工 TCP:有连接,可靠传输,面向字…

深度学习之基于YOLOv5烟花燃放智能检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 在庆祝和特殊节日中&#xff0c;烟花燃放作为传统的庆祝方式之一&#xff0c;深受人们的喜爱。…

ChatGPT的AI“记忆”可以记住付费客户的偏好

通过记住有关 ChatGPT Plus 订阅者的详细信息&#xff0c;OpenAI 的聊天机器人添加了更多个人助理风格的功能 OpenAI 在今年二月宣布了 “记忆 ”功能&#xff0c;该功能允许 ChatGPT 更永久地存储查询、提示和其他自定义功能。当时&#xff0c;只有 “一小部分 ”用户可以使用…

ChatGPT 网络安全秘籍(一)

原文&#xff1a;zh.annas-archive.org/md5/6b2705e0d6d24d8c113752f67b42d7d8 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 在不断发展的网络安全领域中&#xff0c;由 OpenAI 推出的 ChatGPT 所代表的生成式人工智能和大型语言模型&#xff08;LLMs&#xf…

Mybatis.net + Mysql

项目文件结构 NuGet下载Mybatis.net相关包&#xff1a;IBatisNet 安装完成后&#xff0c;会显示在&#xff0c;在已安装页面。同时&#xff0c;在管理器中的引用列表中&#xff0c;会多出来两个引用文件 IBatisNet.CommonIBatisNet.DataMapper 安装 Mysql.data。 注意&#xff…

深入理解正则表达式:从入门到精通

title: 深入理解正则表达式&#xff1a;从入门到精通 date: 2024/4/30 18:37:21 updated: 2024/4/30 18:37:21 tags: 正则Python文本分析日志挖掘数据清洗模式匹配工具推荐 第一章&#xff1a;正则表达式入门 介绍正则表达式的基本概念和语法 正则表达式是一种用于描述字符串…

Android 音视频播放器 Demo(二)—— 音频解码与音视频同步

音视频编解码系列目录&#xff1a; Android 音视频基础知识 Android 音视频播放器 Demo&#xff08;一&#xff09;—— 视频解码与渲染 Android 音视频播放器 Demo&#xff08;二&#xff09;—— 音频解码与音视频同步 RTMP 直播推流 Demo&#xff08;一&#xff09;—— 项目…

使 Elasticsearch 和 Lucene 成为最佳向量数据库:速度提高 8 倍,效率提高 32 倍

作者&#xff1a;来自 Elastic Mayya Sharipova, Benjamin Trent, Jim Ferenczi Elasticsearch 和 Lucene 成绩单&#xff1a;值得注意的速度和效率投资 我们 Elastic 的使命是将 Apache Lucene 打造成最佳的向量数据库&#xff0c;并继续提升 Elasticsearch 作为搜索和 RAG&a…

Jenkins自动化搭建记录

每一份努力都是有一份期盼&#xff0c;每一份付出都是为了有更多的收获。 本文记录一次搭建Jenkins自动参数化打包APK的实现过程和碰到的问题&#xff0c;实现了在Windows和Mac系统下的自动化打包流程。 因为Jenkins的安装过程在网上的教程很多&#xff0c;这里就不在赘述。 …

使用 LlamaIndex 和 Llama 2-Chat 构建知识驱动的对话应用程序

文章目录 使用 LlamaIndex 和 Llama 2-Chat 构建知识驱动的对话应用程序Llama 2-70B-聊天LlamaIndex 解决方案概述先决条件使用 SageMaker JumpStart 部署 GPT-J 嵌入模型使用 SageMaker Python SDK 进行部署在 SageMaker Studio 中使用 SageMaker JumpStart 进行部署使用 Sage…

Dashboard 介绍

Dashboard 介绍 一、K8S Dashboard简介 简单的说&#xff0c;K8S Dashboard是官方的一个基于WEB的用户界面&#xff0c;专门用来管理K8S集群&#xff0c;并可展示集群的状态。K8S集群安装好后默认没有包含Dashboard&#xff0c;我们需要额外创建它 二、RABC简介 还是那句话&a…

关于下载上传的sheetjs

一、背景 需要讲后端返回来的表格数据通过前端设置导出其中某些字段&#xff0c;而且得是xlsx格式的。 那就考虑使用控件SheetJS。如果是几年前&#xff0c;一般来说&#xff0c;保存excel的文件都是后端去处理&#xff0c;处理完成给前端一个接口&#xff0c;前端调用了打开…

SQLite的扩展函数Carray()表值函数(三十八)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite如何处理CSV 虚拟表 下一篇&#xff1a;SQLite—系列文章目录 ​ 1. 概述 Carray()是一个具有单列的表值函数(名为 “value”)和零行或多行。 carray() 中每一行的“值”取自 C 语言数组 由应用程序通过参数绑定提…

如何进行面向对象分析、面向对象设计和面向对象编程

目录 1.引言 2.案例介绍和难点剖析 3.如何进行面向对象分析 4.如何进行面向对象设计 5.如何进行面向对象编程 6.总结 1.引言 面向对象分析(OOA)、面向对象设计(00D)和面向对象编程(OOP)是面向对象开发的3个主要环节。 在以往的工作中&#xff0c;作者发现&#xff0c;很多…