当前位置: 首页 > news >正文

Vue3中使用axios

Promise介绍

同步代码与异步代码

 

安装并引入axios

npm install axios

此时package.json里面就多了axios依赖

 引入axios

获取数据

Axios GET参数构成:axios.get(url,{config{},…{}…})

  1. url:

    • 字符串:目标服务器的地址,如 https://api.example.com/resource
  2. config (可选):

    • 配置对象,用于设置请求的具体行为。常用的配置项包括:

    • params: URL 查询参数,将其序列化为查询字符串并附加到请求 URL。例如:

      params: { userId: 1, sort: 'asc' }

    • headers: 自定义请求头,例如 Authorization 头:

      headers: { 'Authorization': 'Bearer YOUR_TOKEN' }

    • timeout: 请求超时的时间,单位为毫秒。

      timeout: 5000 // 5秒超时

    • responseType: 指定响应类型(如 'json', 'text', 'blob', 'arraybuffer', 'document')。

    • withCredentials: 指定是否跨域请求时是否需要使用凭证(如 Cookies)。

    • validateStatus: 自定义请求状态码的成功范围。默认情况下,2xx 状态码会被视为成功。

// 以下是个获取url里数据的函数
const getStudent = async () => { // await用在函数里面要在函数前面加async// 也可以用结构来承接axios返回数据const x = await axios.get('http://geek.itheima.net/v1_0/channels')// axios要配合await使用console.log(x);count.value = x.data.data.arrays // 把axios获取的数据赋值给前面的变量}

调用该函数后就得到了url里面的数据

  

 在 Vue 3 中,使用 Axios 进行数据请求通常是放在 onMounted 生命周期钩子中。这个钩子会在组件实例被挂载后立即调用,非常适合进行初始数据获取。如果是点按钮来获取并渲染,就不用放在OnMounted函数里

onMounted(() => {

        // 在组件挂载后执行的代码

         });

<script setup>
import { useStudentStore } from '@/store';
import { onMounted } from 'vue';
const StudentStore = useStudentStore()
// 在组件挂载完成后调用getStudent(),就是要放在onMounted(() => {<fun>})里
onMounted(() => {StudentStore.getStudent()
})
</script><template><h1>这是son2</h1><ul><li v-for="(item, index) in StudentStore.prince" :key="index">{{ index + 1 }} {{ item }}</li></ul></template>

发送数据

Axios POST 请求参数结构:axios.post(url, data,{config{},…{}…})

  1. url:

    • 字符串:目标服务器的地址,如 https://api.example.com/resource
  2. data(传得较多):

    • 对象:将被作为请求体发送到服务器的数据。内容可以是任意数据类型(对象、数组、基本数据类型等),通常是 JSON 格式的对象

    示例:

    { name: 'Alice', age: 30 }

  3. config (可选):

    • 配置对象,用于设置请求的具体行为。常用的配置项包括:
    • headers: 自定义请求头。

      headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer TOKEN' }

    • timeout: 请求超时的时间,单位是毫秒。timeout: 1000 // 一秒超时
    • params: URL 查询参数,会自动拼接到 URL 中。

      params: { userId: 1 }

    • responseType: 指定响应类型。

      responseType: 'json' // 默认是 json

    • validateStatus: 自定义请求状态码的成功范围。默认情况下,2xx 状态码会被视为成功。

      validateStatus: function (status) { return status >= 200 && status < 500; // 只接收 2xx 和 4xx 状态码 }

const postfeedback = async() => {console.log(advice.value); // advice对象变量在函数外定义好,并用v-model与输入框绑定// 发送post请求并获得响应const resp = await axios.post('https://hmajax.itheima.net/api/feedback', advice.value)alert(resp.data.message); // 后端发送的响应数据}

axios拦截器

token介绍:

在Vue 3中,使用axios拦截器可以帮助我们在请求发送之前或响应到达之后执行一些操作。这些操作可以包括设置请求头、处理错误、统一管理跳转等。

如何使用axios拦截器:

1. 请求拦截器:在请求发送之前执行,可以用来修改请求配置或添加额外的逻辑,例如添加token验证信息。

   import axios from 'axios';axios.interceptors.request.use(config => {// 在这里添加token或其他配置const token = localStorage.getItem('token');if (token) {config.headers['Authorization'] = `Bearer ${token}`;}return config;},error => {return Promise.reject(error); //会捕获错误并返回一个拒绝的 Promise});

2. 响应拦截器:在响应到达之后执行,可以用来处理响应数据或进行错误处理。

axios.interceptors.response.use(response => {// 对响应数据进行处理return response.data;},error => {// 对响应错误进行处理if (error.response && error.response.status === 401) {// 处理401错误,例如跳转到登录页面}return Promise.reject(error);});

   3. 移除拦截器:如果需要移除拦截器,可以使用`eject`方法。

   const myInterceptor = axios.interceptors.request.use(...);axios.interceptors.request.eject(myInterceptor);

4. 在Vue 3项目中设置axios实例:通常我们会创建一个axios实例,并在项目中全局使用。

// src/axios/index.jsimport axios from 'axios';const instance = axios.create({baseURL: 'http://your-api-url',timeout: 1000,});// 添加拦截器instance.interceptors.request.use(...);instance.interceptors.response.use(...);export default instance;

5. 在main.js中引入axios实例

import { createApp } from 'vue';import App from './App.vue';import axios from './axios'; // 引入封装的axios实例const app = createApp(App);app.config.globalProperties.$axios = axios; // 将axios挂载到全局app.mount('#app');

6. 在组件中使用:

import { ref } from 'vue';export default {setup() {const data = ref(null);const error = ref(null);const fetchData = async () => {try {data.value = await this.$axios.get('/data');} catch (err) {error.value = err;}};fetchData();return { data, error };}}

通过上述步骤,你可以在Vue 3项目中灵活地使用axios拦截器来处理HTTP请求和响应。这样不仅可以简化代码,还可以提高项目的可维护性。
 

http://www.lryc.cn/news/453215.html

相关文章:

  • 国创——VR虚拟陪伴
  • 【Android 源码分析】Activity生命周期之onPause
  • ​IAR全面支持国科环宇AS32X系列RISC-V车规MCU
  • Java题集(从入门到精通)04
  • 《西北师范大学学报 (自然科学版)》
  • Oracle SQL语句没有过滤条件,究竟是否会走索引??
  • Java中参数传递:按值还是按引用?
  • Linux忘记root用户密码怎么重设密码
  • 【Web】复现n00bzCTF2024 web题解(全)
  • 仿RabbitMQ实现消息队列客户端
  • CSS | 面试题:你知道几种移动端适配方案?
  • 【web安全】——XSS漏洞
  • JAVA基础语法 Day11
  • 知识图谱入门——7:阶段案例:使用 Protégé、Jupyter Notebook 中的 spaCy 和 Neo4j Desktop 搭建知识图谱
  • 【AIGC】VoiceControl for ChatGPT指南:轻松开启ChatGPT语音对话模式
  • 基于SpringCloud的微服务架构下安全开发运维准则
  • vue的图片显示
  • 深度学习06:线性回归模型
  • Angular ng-state script 元素的生成机制介绍
  • 小程序-全局数据共享
  • vSAN01:vSAN简介、安装、磁盘组、内部架构与调用关系
  • Apache NiFi最全面试题及参考答案
  • 基于Docker部署最新版本SkyWalking【10.1.0版本】
  • 如何在 Ubuntu 18.04 上使用 LEMP 安装 WordPress
  • shadcn-vue 快速入门(2)
  • Oracle数据恢复—异常断电导致Oracle数据库报错的数据恢复案例
  • 数据结构-4.1.特殊矩阵的压缩存储
  • Hive数仓操作(十四)
  • SpringBoot技术:实现古典舞在线交流平台的秘诀
  • 自动驾驶系列—全面解析自动驾驶线控制动技术:智能驾驶的关键执行器