Axios

devtools/2024/12/23 4:28:29/

文章目录

  • Axios
    • Axios特性
    • 安装
    • 使用方法
    • Axios 实例
    • 拦截器
    • 取消请求
    • 响应结构
    • 错误处理
    • 在Vue中封装Axios

Axios

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

文档:https://axios.nodejs.cn/

Axios特性

  • 从浏览器中创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防止 CSRF

安装

使用 npm:

$ npm install axios

使用 yarn:

$ yarn add axios

使用方法

发送一个 GET 请求:

javascript">axios.get('/user', {params: {ID: 12345}}).then(function (response) {console.log(response);}).catch(function (error) {console.log(error);}).finally(function () {// always executed});  

Axios 也支持 POST 请求:

javascript">axios.post('/user', {firstName: 'Fred',lastName: 'Flintstone'}).then(function (response) {console.log(response);}).catch(function (error) {console.log(error);});

发送表单数据:

const {data} = await axios.post('https://httpbin.org/post', {firstName: 'Fred',lastName: 'Flintstone',orders: [1, 2, 3],photo: document.querySelector('#fileInput').files}, {headers: {'Content-Type': 'multipart/form-data'}}
)

Axios 实例

我们可以使用自定义配置创建一个新的 axios 实例。

const instance = axios.create({baseURL: 'https://some-domain.com/api/',timeout: 1000,headers: {'X-Custom-Header': 'foobar'}
});

拦截器

可以在请求或响应被 then 或 catch 处理前拦截它们:

javascript">// Add a request interceptor
axios.interceptors.request.use(function (config) {// Do something before request is sentreturn config;}, function (error) {// Do something with request errorreturn Promise.reject(error);});// Add a response interceptor
axios.interceptors.response.use(function (response) {// Any status code that lie within the range of 2xx cause this function to trigger// Do something with response datareturn response;}, function (error) {// Any status codes that falls outside the range of 2xx cause this function to trigger// Do something with response errorreturn Promise.reject(error);});

取消请求

Axios 允许创建自定义的实例,配置默认的请求行为:
javascript
// Create an instance with the default settings
const instance = axios.create({baseURL: 'https://api.example.com'
});// Alter defaults after instance has been created
instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;// Send a GET request
instance.get('/user/12345').then(function(response){console.log(response.data);});

响应结构

响应的数据结构包括以下几个重要部分:

javascript">axios.get('/user/12345').then(function(response) {console.log(response.data);console.log(response.status);console.log(response.statusText);console.log(response.headers);console.log(response.config);});

错误处理

处理请求错误时,Axios 会将错误封装在一个统一的对象中:

javascript">axios.get('/user/12345').catch(function (error) {if (error.response) {// The request was made and the server responded with a status code// that falls out of the range of 2xxconsole.log(error.response.data);console.log(error.response.status);console.log(error.response.headers);} else if (error.request) {// The request was made but no response was receivedconsole.log(error.request);} else {// Something happened in setting up the request that triggered an Errorconsole.log('Error', error.message);}console.log(error.config);});

在Vue中封装Axios

import axios from "axios";
import { ElMessage } from "element-plus";const baseURL = "http://127.0.0.1:8000";
const instance = axios.create({baseURL: baseURL,timeout: 5000,
});instance.interceptors.request.use((config) => {// 添加用户tokenreturn config;},(e) => Promise.reject(e)
);// 添加响应拦截器
instance.interceptors.response.use(function (response) {// 2xx 范围内的状态码都会触发该函数。// 对响应数据做点什么return response;},async function async(error) {// 超出 2xx 范围的状态码都会触发该函数。// 对响应错误做点什么if (error.response.status === 401) {// 可验证用户是否登录ElMessage.error("登录状态失效,请重新登录");}ElMessage.error(error.response.data.detail || error.response.data.error || "服务异常");return Promise.reject(error);}
);export default instance;
export { baseURL };

http://www.ppmy.cn/devtools/25483.html

相关文章

汽车底盘域的学习笔记

前言:底盘域分为传统车型底盘域和新能源车型底盘域(新能源系统又可以分为纯电和混动车型,有时间可以再研究一下) 1:传统车型底盘域 细分的话可以分为四个子系统 传动系统 行驶系统 转向系统 制动系统 1.1传动系…

Furion项目的单元测试

.Net项目中如果要对Controller或者服务进行测试一般要用mock创建需要注入的实例, 要配置好这些实例还挺复杂的 在Furion帮我们实现了单元测试的构造函数注入, 让单元测试变得简单, 具体步骤如下 在解决方面里面新增一个xunit的测试项目TestProject1, 测试项目一般单独放在test…

Qt :浅谈在大型项目中使用信号管理器

一、引言 在大型的Qt项目中,我们往往涉及到很多不同类型的对象之间通信交互,这时候,仍旧采用小项目使用的哪里使用,哪里关联的方法,在复杂的场景下将是无穷无尽的折磨。 下面我们给出一种苦难的场景。 class A: public QObject {Q_OBJECT public:A(QObject *parent = nu…

对于button按钮引发的bug

主要原因就是今天在给button按钮添加一个点击事件的时候,并没有声明button的type类型,就一直发生点击按钮但事件并不触发的问题。 触发这种问题的原因就是: 按钮默认的 type 类型是 "submit",而不是 "button"。当你不显式…

中应该如何让c++工程认识.c工程编译出来的库文件?

from gpt 但是 测试此方法没问题 在 .h 文件中声明 C 函数的原型是让 C 工程认识 C 工程编译出来的库文件的关键。下面是一种常见的做法: 在 .h 文件中声明函数原型: 创建一个 .h 文件,其中包含要在 C 代码中调用的 C 函数的声明。这些声明…

day04--react中state的简化

一、简化state 回顾我们之前的写法: state是在构造器里面定义的。 1)我们为什么要在构造器里面定义? 答:对于创建一个实例对象时,我们对要传进来的数据进行接收,那么我们必须要写一个构造器来接收传进来的…

Git零基础

Git工作流程图 操作指令 分支 、 指令总结 远程仓库

瑞米派实时系统与EtherCAT移植-米尔Remi Pi

1.概述 Remi Pi采用瑞萨RZ/G2L作为核心处理器,该处理器搭载双核Cortex-A551.2GHzCortex-M33200MHz处理器,其内部集成高性能3D加速引擎Mail-G31 GPU(500MHz)和视频处理单元(支持H.264硬件编解码),16位的DDR4-1600 / DDR3L-1333内存…