【前后端数据交互:Axios】

2023-11-20

前后端数据交互:Axios

Axios 介绍

  在前端页面展示的数据大多数都是通过访问一个API获取的,做这件事的方法有好几种,例如jquery ajax、vue-resource、axios,而vue-resource是vue插件,但3版本不再更新,目前官方推荐主流的axios,aixos是一个http请求库。
官方文档:http://www.axios-js.com/zh-cn/docs/

Axios 安装

1、安装axios:npm install axios
2、在main.js文件中全局注册
3、在组件中使用

//安装axios
npm install axios

//在main.js文件中全局注册
import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import Test from "@/components/Test";
import axios from "axios";

//createApp(App).use(router).mount("#app");
const app = createApp(App);
app.use(router).use(router).mount('#app');
app.component('Test', Test)
app.config.globalProperties.$axios=axios

从API获取用户数据,在前端展示:

<template>
  <table border="1px">
    <thead>
    <tr>
      <td>ID</td>
      <td>用户</td>
      <td>邮箱</td>
      <td>性别</td>
      <td>地址</td>
    </tr>
    </thead>
    <tbody v-for="i in username" :key="i.id">
    <tr>
      <td>{{ i.id }}</td>
      <td>{{ i.username }}</td>
      <td>{{ i.email }}</td>
      <td>{{ i.sex }}</td>
      <td>{{ i.city }}</td>
    </tr>
    </tbody>
  </table>
  <button type="button" @click="getData">获取用户信息</button>
</template>
<script>
export default {
  name: "TestUser",
  data(){
    return{
      username: ""
    }
  },methods:{
      getData(){
        this.$axios.get('http://127.0.0.1:8888/api/v1/user') //过去接口数据
            .then(response => (this.username=response.data.data))  //将获取到的数据赋值给
      }
  }
}
可以加created实现打开页面自动加载

Axios发送post请求

<template>
  <form action="#">
    用户名:<input type="text" v-model="form.username">
    密 码:<input type="password" v-model="form.password">
    <button @click="btn">登录</button>
  </form>
  <p style="color: red" v-if="notic">用户名或密码不能为空</p>
</template>

<script>
export default {
  name: "postreq",
  data() {
    return {
      form: {
        username: "",
        password: ""
      },
      notic: false
    }
  },methods: {
    btn(){
      if (this.form.username == "" || this.form.password == ""){
        this.notic = true
      }else{
        this.notic = false
        console.log(this.form)
        this.$axios.post("http://127.0.0.1:8888/api/v1/user", this.form)

      }
    }
    }
}
</script>

<style scoped>

</style>

Axios 异常处理

  很多时候我们可能并没有从API 获取想要的数据。这可能是由于很多种因素引起的,比如axios 调用可能由于多种原因而失败,包括但不限于:
  • API 不工作了;
  • 请求发错了;
  • API 没有按我们预期的格式返回信息。
 可以使用catch异常处理这些问题。
模拟连接一个未存在的地址,前端给出提示:

<template>
  <table border="1px">
    <thead>
    <tr>
      <td>ID</td>
      <td>用户</td>
      <td>邮箱</td>
      <td>性别</td>
      <td>地址</td>
    </tr>
    </thead>
    <tbody v-for="i in username" :key="i.id">
    <tr>
      <td>{{ i.id }}</td>
      <td>{{ i.username }}</td>
      <td>{{ i.email }}</td>
      <td>{{ i.sex }}</td>
      <td>{{ i.city }}</td>
    </tr>
    </tbody>
  </table>
  <button type="button" @click="getData">获取用户信息</button>
</template>
<script>
export default {
  name: "TestUser",
  data(){
    return{
      username: "",
      error: "获取数据失败,请稍后再试"
    }
  },methods:{
      getData(){
        this.$axios.get('http://127.0.0.1:8888/user.json1') //过去接口数据
            .then(response => {this.username=response.data.data})  //将获取到的数据赋值给
            .catch(error =>{
              console.log(error)
            alert(this.error)
            })
      }
  },created() {
    this.getData()
  }
}

</script>

<style scoped>

Axios 全局默认值

  在开发中,几乎每个组件都会用到axios发起数据请求,如果每次都填写完整的请求路径,不利于后期维护。这时可以设置全局axios默认值。
在main.js里定义

axios.defaults.baseURL = 'http://127.0.0.1:8888' //设置全局默认值
axios.defaults.timeout = 5000 //设置5秒超时时间

在组件里直接写接口地址即可:

getData(){
        this.$axios.get('/api/v1/username') //直接写路径就可以了
            .then(response => {this.username=response.data.data})  
            .catch(error =>{
              console.log(error)
            alert(this.error)
            })
      }

Axios 自定义实例默认值

  有时候服务端接口有多个地址,就会涉及请求的域名不同、配置不同等,这时自定义实例可以很好解决。
1、创建src/api/test1.js文件
在这里插入图片描述
2、自定义实例

import axios from "axios";
const instance1 = axios.create({
    baseURL: "http://192.168.0.1",
    timeout: 5000
})
export default instance1 //暴露函数

3、全局main.js注册

import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import Test from "@/components/Test";
//import axios from "axios"; 原本注册的axios要取消
import axios from "./api/test1";

//createApp(App).use(router).mount("#app");
const app = createApp(App);
app.use(router).use(router).mount('#app');
app.component('Test', Test)
app.config.globalProperties.$test1=axios  //全局注册

4、组件使用

      getData(){
        this.$test1.get('/test/user') //原本的$axios改为新注册的$test1
            .then(response => {this.username=response.data.data})
            .catch(error =>{
              console.log(error)
            alert(this.error)
            })
      }

Axios 拦截器

拦截器可以拦截每一次请求和响应,然后进行相应的处理。
 请求拦截应用场景:
  • 发起请求前添加header
 响应拦截应用场景:
  • 统一处理API响应状态码200或非200的提示消息
  • 统一处理catch异常提示信息
请求/响应拦截示例:

import axios from "axios";
const instanceUrl = axios.create({
    baseURL: "http://127.0.0.1:8888",
    timeout: 5000
})
export default instanceUrl
instanceUrl.interceptors.request.use(config => {
    config.headers['testHeader'] = '123456'
    return config;
},error =>{
    //alert("请求接口失败")
    console.log("1111111")
    return Promise.reject(error)
})
instanceUrl.interceptors.response.use(response =>{
    return response;
}, error =>{
    console.log(error);
    return Promise.reject(error)
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【前后端数据交互:Axios】 的相关文章

随机推荐

  • ubuntu运用软件和更新自动安装NVIDIA显卡驱动

    可能是我电脑硬件问题 直接运用软件和更新安装驱动 老是不能装成功 甚至装的系统都进不了 还要重装系统 这次重装系统后 我试着用软件和更新来自动安装驱动 一 secure boot修改为disable 1 首先进入终端输入 secure bo
  • error: (-209) The operation is neither ‘array op array‘ (where arrays have the same size and type)

    问题展示 error 209 The operation is neither array op array where arrays have the same size and type 错误原因 两个矩阵尺寸大小不一样 解决方法 指定
  • IDEA运行缓慢卡顿,解决idea卡顿,控制台中文乱码 以及其它常用设置

    IDEA运行缓慢卡顿 解决idea卡顿问题以及常用设置 IDEA卡顿原因 优化IDEA配置 重点推荐的方法 手动修改IDEA配置步骤 其他卡顿优化 参考 1 idea启动时会有两个快捷方式 2 卸载不需要用的插件 3 减少内存 4 适当关闭
  • HttpClient 简介说明

    转自 HttpClient 简介说明 下文笔者将讲述HttpClient框架的简介说明 如下所示 HttpCient简介说明 HttpClient是一个开源项目 它是Apache Jakarta Common下的一个子项目 HttpClie
  • Invalid Address specified to RtlValidateHeap

    Invalid Address specified to RtlValidateHeap VC编程 最后推出对话框的时候 会有错误提示声音 硄 但是没有弹出错误提示对话框 症状描述与下面的类似 声音就和Assertion Failure一样
  • html遍历数组,JS数组遍历的几种方式

    JS数组遍历 基本就是for forin foreach forof map等等一些方法 以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种 普通for循环 代码如下 for j 0 j lt arr length j 简要
  • 【三电平SVPWM学习

    导读 本期对三电平SVPWM的原理和建模做一个简单介绍 并与两电平SVPWM做了一个对比 后面把三电平的SVPWM运用到异步电机直接转矩控制中 看与传统的两电平SVPWM 控制性能是否得到改善 模型可分享 关注公众号 浅谈电机控制 留下邮箱
  • 八大排序算法(六)——优先队列、堆和堆排序

    6 1 API 优先队列是一种抽象数据类型 它表示了一组值和对这些值的操作 优先队列最重要的操作就是删除最大元素和插入元素 6 2 初级实现 6 2 1 数组实现 无序 或许实现优先队列最简单方法就是基于下压栈的代码 insert 方法的代
  • java通过文件路径读取该路径下的所有文件并将其放入list中

    java通过文件路径读取该路径下的所有文件并将其放入list中 java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中 假设指定路径为path 目标集合为fileList 遍历指定路径下的所有文件 如果是目录文件则递归
  • 旋转链表(leetcode)

    61 旋转链表 给你一个链表的头节点 head 旋转链表 将链表每个节点向右移动 k 个位置 示例 1 输入 head 1 2 3 4 5 k 2 输出 4 5 1 2 3 示例 2 输入 head 0 1 2 k 4 输出 2 0 1 提
  • centos安装配置hadoop超详细过程(含故障排除)

    1 集群部署介绍 1 1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台 以Hadoop分布式文件系统 HDFS Hadoop Distributed Filesystem 和MapReduce Goog
  • 计算机科学丛书(2014-2018.Q1)

    ISBN 名称 作者 出版时间 978 7 111 53451 8 数学设计和计算机体系结构 原书第2版 美 戴维 莫尼 哈里斯 莎拉 L 哈里斯著 978 7 111 44075 8 嵌入式计算系统设计原理 美 Marilyn Wolf著
  • C#中string.Format输出内容中含有花括号的解决方法

    转载一篇 版权声明 本文为CSDN博主 九德真君 的原创文章 遵循CC 4 0 BY SA版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net lzdidiv article details 69469
  • python matrix用法_numpy中matrix使用方法

    matrix T transpose 返回矩阵的转置矩阵 matrix H hermitian conjugate transpose 返回复数矩阵的共轭元素矩阵 matrix I inverse 返回矩阵的逆矩阵 matrix A bas
  • 基于C语言实现的文件压缩算法-哈夫曼编码

    哈夫曼编码 是一种数据压缩算法 通常用于无损数据压缩 该算法是由 David A Huffman在麻省理工学院就读理学博士 Doctor of Science 的时候发明的 这位大佬在1952年发表了相关的一篇论文A Method for
  • 页面上input输入框宽度实现自动调整

    input输入框宽度实现自动调整 本文介绍两种方式 一是通过获取input内容的宽度实现输入框宽度的自动调整 二是通过内容字符串的长度乘以文本字体大小的积 来实现输入框宽度的自动调整 1 input输入框宽度的获取方式一 由于input输入
  • 利用maven项目创建一个web项目工程(图文详解)

    最近正开始学习java 老师布置的第一个作业便是用maven项目创建一个web项目工程 不会 跑去百度了半天 跳出来的全是我们csdn的教程 但到创建资源包的时候就没法跟着做了 因为显示已存在 没法跟着创建了 那些文章基本一样的讲法 都是默
  • 超详细的用IDEA整合SSM框架和profile 配置环境

    SSM作为现在最流行的开发框架 很大的提升了开发效率 一些同学在SSM基础上的整合一些更实用的开发基础框架 被用来作为快速开发的基础框架 本次实践主要是以下3个目标 从最基础的SSM框架做起 摸索和处理SSM框架整合中可能会遇到的问题 使用
  • 手机知识:手机的快充技术是什么,看完本文你就懂了

    目录 1 什么是手机快充 2 目前主流的手机快充协议 2 1 PD协议 2 2 PE协议 联发科 2 3 QC协议 高通 2 4 VOOC闪充 OPPO厂商 2 5 SCP FCP闪充 华为厂商 2 6 FlashCharge闪充 Vivo
  • 【前后端数据交互:Axios】

    前后端数据交互 Axios Axios 介绍 在前端页面展示的数据大多数都是通过访问一个API获取的 做这件事的方法有好几种 例如jquery ajax vue resource axios 而vue resource是vue插件 但3版本