Vue 封装axios

【一】准备工作

(1)安装必要插件

  • 安装Axios,这是必要的。默认最新版
npm install axios -S
或 
cnpm install axios -S
  • 安装elementui-plus,用于提示信息
npm install element-plus --save
# 或
cnpm install element-plus --save
  • 安装vue-router,用于路由跳转
npm install  vue-router@4 -S
# 或者  
cnpm install  vue-router@4 -S
  • 其他插件,视开发情况自己决定,这是我目前安装的版本

image-20240511191626912

  • 最后在入口文件(main.js)中注册这些插件
import {createApp} from 'vue'
import App from './App.vue'
import router from './router'
import ElementPlus from "element-plus";
import 'element-plus/dist/index.css'createApp(App).use(ElementPlus).use(router).mount('#app')

(2)后端返回数据格式统一

  • 后端正常返回信息格式
    • 有一个必要的code:标识响应成功与否,这了规定成功是100,失败是其他的
    • 有一个msg:无论成功与否,返回描述信息
    • results或result:
      • 返回多条信息,那么就是results,一个列表套字典(对前端来说是数组套对象)
      • 返回单条信息,那么就是result,一个字典格式(对前端来说是对象)
      • 当然也可以没有这个字段信息
    • 其他信息字段
{"code": 100,"msg": "信息","results": [{"id": 1,"name": "bruce"},{"id": 2,"name": "lucy"}]
}

image-20240511193341608

【二】封装axios

(1)分部分讲解

  • 导入模块,指定基础路由
    • axios是肯定要导入的模块
    • router用于路由跳转
    • ElMessage用于信息提示
import axios from "axios";
import {ElMessage} from 'element-plus'axios.defaults.baseURL = "http://localhost:8000/"
  • 创建请求对象,指定超时时间,指定编码格式
    • 创建请求对象,叫做request
    • 指定访问超时时间为5s:timeout: 5000
    • 指定请求头中的编码格式:
      • headers: {'Content-Type': "application/json; charset=utf-8"}
const request = axios.create({ timeout: 5000,headers: {'Content-Type': "application/json; charset=utf-8"}
})
  • 请求发出前拦截器
    • 部分信息页面肯定是需要登录才可以查看的,即需要携带token信息
    • 指定请求头携带token信息,
    • 首先从本地会话中获取token,然后拼接指定的格式(这是jwt认证,所以要拼接一下)
request.interceptors.request.use(config => {const token = localStorage.getItem("token")if (token) {config.headers['Authorization'] = "Bearer " + token}return config
})
  • 请求响应拦截部分

    • 首先后端的返回数据应该是满足一定格式,这个在准备工作中说过了

    • 返回的code如果是100,那么就是成功了,所以正常返回数据信息即可

    • 如果返回code不是100,那么就是失败了

    • 再就是其他错误了,这个都是不正常的返回数据信息格式

request.interceptors.response.use(response => {let res = response.dataif (res.code === 100) {return response.data} else {// ElMessage.error(!res.msg ? '请求服务器异常,请联系管理员' : res.msg)return Promise.reject(!res.msg ? '请求服务器异常,请联系管理员' : res.msg)}},error => {let errorMessage;if (error.response && error.response.data.msg) {errorMessage = error.response.data.msg} else if (error.message) {errorMessage = error.message; // 使用axios的默认错误消息} else {errorMessage = '未知错误'; // 如果以上都不满足,给出默认消息}ElMessage.error(errorMessage, ); // 显示错误消息return Promise.reject(error); // 拒绝这个promise并返回原始错误对象}
)

(2)整体代码

  • src目录下创建一个http文件夹,在文件夹内创建一个index.js文件(方便导入)
  • 写入如下代码
import axios from "axios";
import {ElMessage} from 'element-plus'axios.defaults.baseURL = "http://127.0.0.1:8000/api/v1/"const request = axios.create({timeout: 5000,headers: {'Content-Type': "application/json; charset=utf-8"}
})request.interceptors.request.use(config => {const token = localStorage.getItem("token")if (token) {config.headers['Authorization'] = "Bearer " + token}return config
})request.interceptors.response.use(response => {let res = response.dataif (res.code === 100) {return response.data} else {// ElMessage.error(!res.msg ? '请求服务器异常,请联系管理员' : res.msg)return Promise.reject(!res.msg ? '请求服务器异常,请联系管理员' : res.msg)}},error => {let errorMessage;if (error.response && error.response.data.msg) {errorMessage = error.response.data.msg} else if (error.message) {errorMessage = error.message;} else {errorMessage = '未知错误';}ElMessage.error(errorMessage);return Promise.reject(error);}
)export default request

【三】使用

(1)选项式API风格(很少用)

  • 这种方式是较为少见的,但是还是简单写一下
    • 首先在入口文件(main.js)中,创建一个插件来设置全局的axios的实例
import axios from './http'const axiosPlugin = {install(app, options) {app.config.globalProperties.$axios = axios; // 在 Vue 3 中设置全局属性}
}createApp(App).use(ElementPlus).use(axiosPlugin).use(router).mount('#app')
  • 测试代码
    • 随便写一个HomeView.vue
<script>
export default {name: "HomeView",created() {this.testRes()},methods: {testRes() {this.$axios({method: 'get',url: 'user/test_response/'}).then((response) => {console.log(response)})},}
}
</script>

image-20240512140231775

(2)组合式API风格(推荐)

  • 这个就简单的多
    • 不需要再入口文件(main.js)中创建插件来全局设置
    • 哪里需要在哪里使用即可
    • 同样的在HomeView.vue中测试
<script setup>
import request from "../http/index.js";request({method: "get",url: "user/test_response/",
}).then(res => console.log(res))</script>

image-20240512140653057

  • 测试一下token能否正常携带
    • 在代码中添加一行
      • localStorage.setItem('token','sssss.ssss.sss')
    • 键是token,值无所谓,只是测试而已
<script setup>
import request from "../http/index.js";
localStorage.setItem('token','sssss.ssss.sss')
request({method: "get",url: "user/test_response/",
}).then(res => console.log(res))</script>
  • 首先查看LocalStorage中是否添加成功

    • image-20240512141303865
  • 在检查发送的请求中是否携带上了token

    • image-20240512141332499

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

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

相关文章

智慧公厕,提升公共厕所管理效率的信息化变革

现代社会中&#xff0c;公共厕所的管理成为一个不可忽视的问题。随着城市化进程的加快&#xff0c;人们对公厕的需求日益增加&#xff0c;但公厕的管理却面临诸多困难。为了解决这一问题&#xff0c;智慧公厕应运而生&#xff0c;通过信息化的变革&#xff0c;提高公厕的管理效…

GeoServer /geoserver/wms RCE漏洞复现(CVE-2022-24816)

0x01 产品简介 GeoServer是一款开源的地理数据服务器软件,主要用于发布、共享和处理各种地理空间数据。它支持众多的地图和空间数据标准,能够使各种设备通过网络来浏览和使用这些地理信息数据。 0x02 漏洞概述 GeoServer /geoserver/wms 接口处存在远程代码执行漏洞,未经…

Python邮件处理库之flanker使用详解

概要 Flanker是一个开源的邮件处理库,专门设计用于解析、验证和构建电子邮件地址和MIME消息。由Mailgun开发,它旨在提高邮件处理的效率和准确性,尤其适用于需要高效邮件验证和解析的应用程序。 安装 安装Flanker非常简单,可以通过Python的包管理器pip进行安装: pip ins…

阿里云服务器下,部署LNMP环境安装wordpress

目录 1 LNMP部署1、简单说明2、nginx部署3、php8 安装4、mysql8安装5、配置 nginx 实现支持 PHP 程序6、安装 php 组件7、测试 2 wordpress部署1、安装2、配置 总结 1 LNMP部署 1、简单说明 首先需要明白&#xff0c;LNMP指的是Linux、Nginx、MySQL、PHP。而如果使用阿里云服…

C语言 | Leetcode C语言题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; int largestRectangleArea(int* heights, int heightsSize) {int st[heightsSize];int p[2];p[0]-1,p[1]heightsSize;int size0,result0;st[size]0;for(int i1;i<heightsSize;i){ while(size!0&&heights[i]<heights[st[size-1…

koa2 + jsonwebtoken + koa-jwt:实现node token验证

一、koa token生成、验证 koa-jwt官网 https://github.com/koajs/jwt 推荐一个koa-jwt学习文档&#xff1a; https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html jsonwebtoken方法添加 const { sign, verify } require(jsonwebtoken); const secretKey …

【Linux系统编程】基本指令(二)

目录 1、mv指令 2、cat指令 输出重定向 ​编辑 追加重定向 输入重定向 3、more指令 4、less指令 5、head指令 6、tail指令 与时间相关的指令 7、date指令 8、cal指令 9、find指令 10、grep指令 11、zip/unzip指令 1、mv指令 mv文件是用来对文件或目录进行重命名…

又一款爆火AI游戏诞生!《换你来当爹》做对了什么?| ShowMeAI体验报告

社区里几百人玩一款AI游戏的场面&#xff0c;值得记录一下&#xff01; 大模型游戏化极度看重〖有趣〗程度。 可有趣的灵魂那么难得&#xff0c;以至于只要一眼&#xff0c;我们就在产品的海洋里发现了 ta 。 1. 有趣的灵魂在发疯疯疯 《换你来当爹》是一款全员发疯的AI游戏&am…

中腾食品上海食堂承包创新食堂空间,构建企业第三文化沙龙

在快节奏的现代职场生活中&#xff0c;企业食堂已不再是简单的餐饮供应地&#xff0c;而是逐渐演变成为员工休息休闲、互动体验、阅读思考的重要场所。中腾国际团餐产业集团通过专业的定制化食堂承包&#xff0c;在企业食堂内部打造企业第三文化空间&#xff0c;为员工提供一个…

Qt初识

Qt初识 1. Qt 背景介绍 1.1 什么是 Qt Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 。它为应⽤程序开发者提供了建⽴艺术级图形界⾯所需的所有功能。它是完全⾯向对象的&#xff0c;很容易扩展。Qt 为开发者提供了⼀种基于组件的开发模式&#xff0c;开发者可以通过简单…

MySQL和吉客云单据接口对接

MySQL和吉客云单据接口对接 源系统:吉客云 杭州吉客云网络技术有限公司是经国家认定的高新技术企业&#xff0c;是国内领先的SaaSERP软件服务商&#xff0c;致力于为企业提供安全稳定、高可用性和高扩展性的一站式数字化解决方案。 写入目标:MySQL MySQL是最流行的数据库之一&a…

MIT 6.5840(6.824) Lab2:Key/Value Server 设计实现

1 实验要求 在本次 Lab 中&#xff0c;你将在单机上构建一个键/值服务器&#xff0c;以确保即使网络出现故障&#xff0c;每个操作也只能执行一次&#xff0c;并且操作是可线性化的。 客户端可以向键/值服务器发送三个不同的 RPC&#xff1a; Put(key, value) 、 Append(key,…