首页 > 其他分享 >axios基础知识详解

axios基础知识详解

时间:2023-07-12 11:32:55浏览次数:43  
标签:拦截器 请求 get 基础知识 axios error response 详解

一、什么是axios

axios是一个基于Promise的HTTP客户端,用于浏览器和Node.js中发送HTTP请求。它支持各种HTTP请求方法,如GET、POST、PUT、DELETE等,并且可以拦截请求和响应,设置请求超时等功能。它也可以与现代前端框架(如Vue.js、React、Angular等)进行集成。

二、如何在Vue.js中使用axios

(1)安装axios

在Vue项目中使用axios之前,需要先安装axios。可以使用npm或yarn命令(必须要有node.js环境)来安装axios:

npm install axios
// 或
yarn add axios
(2)发送HTTP请求

在Vue.js中使用axios非常方便。可以使用axios.get()、axios.post()、axios.put()、axios.delete()等方法来发送不同类型的HTTP请求。下面是一个简单的例子,使用axios从服务器获取数据并将其显示在页面上:

<template>
  <div>
    <ul>
      <li v-for="post in posts" :key="post.id">{{ post.title }}</li>
    </ul>
  </div>
</template>

<script>
import axios from 'axios'; // 引入axios

export default {
  data() {
    return {
      posts: [],
    };
  },

  mounted() {
    axios.get('https://jsonplaceholder.typicode.com/posts')
      .then(response => {
        this.posts = response.data;
      })
      .catch(error => {
        console.error(error);
      });
  },
};
</script>

在上述代码中,我们使用了axios.get()方法来获取指定URL的数据。然后,我们处理响应并将数据存储在组件的数据对象中。如果出现错误,我们会在控制台中输出错误消息。

(3)请求参数

除了简单的GET请求外,还可以在请求中添加更多参数,例如请求头、请求体、查询参数等等。例如,以下是使用axios.post()方法向服务器提交JSON数据的示例:

<script>
import axios from 'axios';

export default {
  data() {
    return {
      newUser: {
        name: '',
        email: '',
        password: '',
      },
    };
  },

  methods: {
    addUser() {
      axios.post('https://api.example.com/users', this.newUser, {
          headers: {
            'Content-Type': 'application/json',
          },
        })
        .then(response => {
          console.log(response.data);
        })
        .catch(error => {
          console.error(error);
        });
    },
  },
};
</script>

在上面的示例中,我们使用axios.post()方法向https://api.example.com/users的URL发送一个名为newUser的JSON对象。我们还添加了一个headers选项,用于设置请求头。

(4)拦截器

还可以使用axios拦截器来修改请求或响应的内容,或者在请求失败时自定义错误消息。例如,以下是一个拦截器的示例,用于在每个请求中添加Authorization头:

<script>
import axios from 'axios';

axios.interceptors.request.use(config => {
  const token = localStorage.getItem('token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

export default {
  // ...
};
</script>

在上面的示例中,我们使用axios.interceptors.request.use()方法来添加一个请求拦截器。在拦截器中,我们检查是否存在token,并将其作为Authorization头添加到请求中。也可以使用axios.interceptors.response.use()方法添加响应拦截器。

(5)对axios进行二次封装

在Vue项目中,我们经常需要对axios进行封装以便于统一处理请求和响应。以下是一个示例代码,通过封装axios实现了统一的请求拦截器、响应拦截器及错误处理。

写在一个JavaScript文件中

import axios from 'axios';

// 创建axios实例
const instance = axios.create({
  baseURL: 'https://api.example.com/',
  timeout: 10000,
});

// 请求拦截器
instance.interceptors.request.use(config => {
  const token = localStorage.getItem('token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
}, error => {
  return Promise.reject(error);
});

// 响应拦截器
instance.interceptors.response.use(response => {
  return response.data;
}, error => {
  if (error.response) {
    // 根据HTTP状态码判断错误类型
    switch (error.response.status) {
      case 401:
        // 处理未授权错误
        break;
      case 403:
        // 处理禁止访问错误
        break;
      case 404:
        // 处理资源不存在错误
        break;
      default:
        // 处理其他错误
        break;
    }
  } else if (error.request) {
    // 处理请求超时等错误
  } else {
    // 处理其他错误
  }
  return Promise.reject(error);
});

// 封装get方法
export function get(url, params = {}) {
  return instance.get(url, { params });
}

// 封装post方法
export function post(url, data = {}) {
  return instance.post(url, data);
}

在上述代码中,我们首先创建了一个名为instance的axios实例,并设置了默认的baseURL和timeout。然后,我们使用instance.interceptors.request.use()方法添加了一个请求拦截器,在其中将存储在localStorage中的token作为Authorization头添加到每个请求中。接着,我们使用instance.interceptors.response.use()方法添加了一个响应拦截器,并根据HTTP状态码判断错误类型。最后,我们使用export关键字导出了get和post两个方法,分别用于发起GET和POST请求。

在Vue组件中使用这些方法非常简单。例如,以下是一个示例组件,使用上述封装的get方法从服务器获取数据并将其显示在页面上:

<template>
  <div>
    <ul>
      <li v-for="post in posts" :key="post.id">{{ post.title }}</li>
    </ul>
  </div>
</template>

<script>
import { get } from '@/utils/request';// 导入封装的get方法

export default {
  data() {
    return {
      posts: [],
    };
  },

  mounted() {
    get('/posts')
      .then(data => {
        this.posts = data;
      })
      .catch(error => {
        console.error(error);
      });
  },
};
</script>

在上述代码中,我们首先使用import关键字导入封装的get方法,然后在mounted钩子函数中调用该方法并指定要请求的URL。如果请求成功,我们将响应数据存储在组件的数据对象中,并在页面上显示它们。如果请求失败,我们将错误消息输出到控制台。

总之,在Vue.js中使用axios非常方便,它可以帮助我们轻松地与服务器进行通信,并处理异步请求的结果。

标签:拦截器,请求,get,基础知识,axios,error,response,详解
From: https://blog.51cto.com/u_16131726/6697738

相关文章

  • 详解nvim内建LSP体系与基于nvim-cmp的代码补全体系
    2023年,nvim以及其生态已经发展的愈来愈完善了。nvim内置的LSP(以及具体的语言服务)加上众多插件,可以搭建出支持各种类型语法检查、代码补全、代码格式化等功能的IDE。网络上关于如何配置的文章很多,但本人发现绝大多数的文章仅仅停留在配置本身,没有深入的解释这些插件的作用和它们之......
  • Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是
    1.jquerygrep()筛选遍历数组(可以得到反转的数组)//1.jquerygrep()筛选遍历数组(可以得到反转的数组)vararray=[1,5,9,3,12,4,48,98,4,75,2,10,11];varfilterArray=$.grep(array,(currentValue)=>{returncurrentValue>10;});console.log(`${filt......
  • c#基础知识篇-名词解释
    程序集概念:是一个包含来程序的名称,版本号,自我描述,文件关联关系和文件位置等信息的一个集合。在.net框架中通过Assembly类来支持,该类位于System.Reflection下,物理位置位于:mscorlib.dll。程序集可以看作是给一堆相关类打一个包,相当于java中的jar包。表现形式:dll(不可执行)、exe(可......
  • 苹果开发者证书、描述文件申请以及p12文件导出详解
    ios开发有个要求就是,打包时需要带上p12证书和mobileprovisionprofile配置文件p12证书来自于,苹果每年要收99美元的开发者费用,开通了开发者权限,才能生成证书mobileprovision profile配置文件里面设置了测试阶段可以下载应用的ios账号,只有在profile里面的账号才能下载当证书过期......
  • Explain详解
    表格样式字段详解id列id列的编号是select的序列号,有几个select就有几个id,并且id的顺序是按select出现的顺序增长的。id列越大执行优先级越高,id相同则从上往下执行,id为NULL最后执行。select_type列simple:简单查询。查询不包含子查询和unionprimary:......
  • 基于生长的棋盘格角点检测方法--(2)代码详解(上)
    上一篇介绍了基于生长的棋盘格角点检测方法的大概原理,详见:基于生长的棋盘格角点检测方法–(1)原理介绍本文进一步从代码解读角度出发,更深入地理解工程中是如何实现的。本文中用到的代码可以从以下链接下载http://www.cvlibs.net/software/libcbdetect/这里我把代码中主要的函......
  • 基于生长的棋盘格角点检测方法--(3)代码详解(下)
    接着上一篇基于生长的棋盘格角点检测方法–(2)代码详解(上),来看一下第二个重要函数chessboardsFromCorners。该函数的目的是用上一步骤中找到的角点恢复出棋盘结构。首先初始化一个3x3的角点矩阵,也就是一个2x2的棋盘格,这是组成一个棋盘的最小单位了。然后利用定义的棋盘能量函数来从......
  • 动态数组和C++ std::vector详解
    目录1.std::vector2.vector的用法    2.1vector的定义和声明    2.2成员函数        2.2.1基本函数            operator=            assign            get_allocator        2.2.2元素访问   ......
  • Java语言基础知识全总结
    一.Java的优点1.      跨平台性。一次编译,到处运行。Java编译器会将Java代码编译成能在JVM上直接运行的字节码文件,C++会将源代码编译成可执行的二进制代码文件,所以C++执行速度快2.      纯面向对象。Java所有的代码都必须在类中书写。C++兼具面向对象和面向过程的特......
  • 详解如何修改Linux文件权限
    参考:详解如何修改Linux文件权限在Linux系统中,可以使用chmod命令来修改文件的权限。该命令用于更改文件或目录的读取(r),写入(w)和执行(x)权限。以下是一些详细的说明和示例:使用数字表示权限:r(读取)=4,w(写入)=2,x(执行)=1。数字组合用于表示所需的权限,例如:rwx(读取、写入和执行)=7,rw-(读......