前端学习11 axios二次封装

1. axios概念

axios是一个基于Promise的HTTP客户端,可以用于浏览器和Node.js环境。axios支持所有现代浏览器和Node.js,可以用于发送GET、POST、PUT、DELETE等HTTP请求,并且支持请求和相应拦截、自动转换数据格式等功能。

2. Axios的核心

1.Promise 基础

Axios 基于 Promise,这意味着所有的请求都是异步的,并且可以使用 .then 和 .catch 方法来处理成功和失败的情况。

2.请求配置

每次发送请求时,可以传递一个配置对象,包含 URL、方法、请求头、请求体等信息。

3.拦截器

Axios 支持请求和响应拦截器,可以在请求发送前或响应接收后进行一些预处理或后处理操作。

4.错误处理

Axios 提供了统一的错误处理机制,可以通过 .catch 方法捕获请求过程中发生的任何错误。

5.取消请求

Axios 支持取消请求,可以在请求发送后随时取消。

6.并发请求

Axios 提供了 axios.all 和 axios.spread 方法,可以同时发送多个请求,并在所有请求完成后处理结果。

3. Axios的基本使用

Axios常用的几种请求方法:get,post,put,patch,delete

get:一般用于获取数据

post:一般用于提交数据(表单提交与文件上传)

patch:更新数据(只将修改的数据推送到后端(服务端))

put:更新数据(所有数据推送到服务端)

delete:删除数据

//引入 axios
import axios from 'axios'

//默认是get 请求
axios({
  //需要请求的URL地址
  url: 'http://123.207.32.32:8000/home/multidata'
}).then(res => {
  //输出请求成功的数据
  console.log(res);
})

axios({
  url:'http://123.207.32.32:8000/home/data',
  // 专门针对get请求的参数拼接
  prams:{
    type:'pop',
    page:1
  }
}).then(res=>{
  console.log(res);
})

4. axios 二次封装

二次封装的必要性:

  1. 代码复用

在多个地方重复编写同样的请求代码,不仅繁琐且容易出错。通过二次封装,我们可以将相同的请求逻辑抽象出来,形成统一的API接口,方便各个组件调用。

  1. 统一处理请求和响应

在数据请求时,我们通常需要处理请求的头、参数、响应的格式等。通过二次封装,可以将这些逻辑集中处理,避免每次请求都写冗余的代码。

  1. 异常处理

在实际应用中,网络请求常常会因多种原因失败。通过封装,可以在一个地方统一处理错误,方便管理和维护。

  1. 拓展功能

对于一些特定项目需求,比如添加请求拦截器、响应拦截器,或者实现请求的重试机制,二次封装提供了灵活的方式来实现这一功能。

4.1 创建Axio实例

首先,创建一个Axios实例,以便于配置和管理。

// axiosInstance.js
import axios from 'axios';

const axiosInstance = axios.create({
    baseURL: ' // API基础路径
    timeout: 10000, // 请求超时时间
    headers: {
        'Content-Type': 'application/json',
    },
});

// 请求拦截器
axiosInstance.interceptors.request.use(
    config => {
        // 可以在发送请求之前做一些处理,如添加token
        const token = localStorage.getItem('token');
        if (token) {
            config.headers.Authorization = `Bearer ${token}`;
        }
        return config;
    },
    error => {
        // 处理请求错误
        return Promise.reject(error);
    }
);

// 响应拦截器
axiosInstance.interceptors.response.use(
    response => {
        // 可以对响应数据进行处理
        return response.data;
    },
    error => {
        // 处理响应错误
        console.error(error);
        return Promise.reject(error);
    }
);

export default axiosInstance;

4.2 封装请求方法

接下来,我们可以将常用的请求方法进行封装,以便于在各个组件中调用

// apiService.js
import axiosInstance from './axiosInstance';

export const getData = (url, params) => {
    return axiosInstance.get(url, { params });
};

export const postData = (url, data) => {
    return axiosInstance.post(url, data);
};

export const putData = (url, data) => {
    return axiosInstance.put(url, data);
};

export const deleteData = (url) => {
    return axiosInstance.delete(url);
};

4.3 使用Axios封装的好处

通过上述代码,我们在项目中可以简化请求的调用,并且能够方便地处理请求和响应。

// 示例使用
import { getData, postData } from './apiService';

getData('/users', { id: 1 })
    .then(data => {
        console.log(data);
    })
    .catch(error => {
        console.error('获取用户数据失败:', error);
    });

postData('/users', { name: 'Jack', age: 30 })
    .then(data => {
        console.log('用户创建成功:', data);
    })
    .catch(error => {
        console.error('创建用户失败:', error);
    });
#前端学习#
全部评论

相关推荐

头像
05-30 14:27
已编辑
北京体育大学 测试工程师
昨天回顾《后青春期的诗》这个2009年的专辑其中的如烟  这首歌曲 再次打动了我 不仅是10几年前的我 更是现在迷茫的我"有没有那么一朵玫瑰 永远不凋谢,永远骄傲和完美 永远不妥协"“有没有那么一首诗篇 找不到句点 青春永远凝聚在我们的岁月”“有没有那么一个明天 重头活一遍 让我再次感受曾挥霍的昨天”曾经的我 没有接触到计算机 本科的时候当过销售 行政前台 审计员  教培机构老师是那么天真无邪 没有那么多的渴求和期盼跑步也是天天打卡 从不缺勤 曾经给同学替跑1000m 一天搞了7次 也乐此不疲到现在 跑步速度已经慢了很多 体重涨了很多 身体差了很多看着操场上风驰电掣的校友 和哈哈大笑的小朋友感觉一切都已经改变了 我已经不是从前的我了我会后悔 选择这个行业吗 应该不会  因为别的行业可能更差 为了获得一些 就注定要割舍一些当时在京东实习的时候 就能感觉到身体是一天不如一天  工作和个人健康也不能两全为了我的个人健康 毅然决然选择了跑路时间是一直向前推进的 一个选择、决定 只是一个分岔路口 没有对错之分人生也只有一次 没有什么重新再来的机会选择了远方 那便只顾风雨兼程站在此时此刻 继续奋斗 继续向前 即使校招可能暂时没有很满意的工作机会之后的社招或者日常工作  我会继续战斗 坚定理想信念 重拾一份初心 继续好好的生活 为了给国家贡献税费  为了我的小日子过得更好
投递京东等公司9个岗位
点赞 评论 收藏
分享
身边统计学+主观猜测算一下进大厂的难度查了一下几所985,211计算机相关专业(计软人工智能大数据等)每年的本科毕业生人数,大概是300-400人,如果取个中间数就是平均350人/校,硕士毕业生查到的数据相差有点大,估计暂且为250人/校。根据官方数据,全国211学校(含985)共有115所,结合985保研率约25%-30%,985同学选择本科直接就业比例约三分之一,考虑到211保研率和深造率都略低,因此假设本科毕业生人数中选择就业的比例大约是40%(事实上我感觉应该再高,但考虑到我假设所有科班同学全选技术岗,所以先这样算),也就是选择本科就业的人数大约为115*350*40%=16100人,另外假设硕士中90%选择就业,那么将有115*250*90%=25875人。由于本科同学选择算法岗位几乎不可能,假设本科同学都选择研发岗,硕士同学80%选择研发岗(随便猜,不知道具体偏高还是偏低),所以得出每年互联网研发岗中含92学历的竞争人数大约为本科16100人,硕士20700人,总人数36800人。算一下需求侧,常说的一线互联网大厂大概10家,二线或者说中厂大概三十家吧,对于大厂来说,我查到京东2024年校招技术岗HC大约有1000+(包含测试开发算法数分等),就直接拿这个数来算了。二线厂+中厂没查到太准确具体数据,有些hc查到500-1000左右,开发岗我就算它400吧,所以总数大约是10*1000+30*400=22000。也就是说,仅考虑92计软相关专业的同学来说,仅需要60%的科班同学就可以填满一线大厂+二线中大厂的所有研发岗位。考虑到以下因素竞争应该会更激烈,以下群体互无重叠,且与上述主体部分无重叠:1.算上92非科班(本/硕均无计算机学历)转码的同学。除了偏硬件类与计软强相关的专业(电子信息,微电子,通信等)转码,还有众多与码无关的理工科(生化环材,机械土木,数学物理等)以及商科转码的同学,我就算总人数15%吧。2.国内92本科计算机相关专业,海外留学深造后回国就业的同学,结合留学率,这部分大概占10-15%左右。3.国内92非科班,但是硕士留学取得计算机相关专业学位,通过留学转码的同学,也算10%。三者加上去,总的求职者数量约50000人,也就是说仅算92学历的同学且不考虑其他因素的情况下,他们进入互联网大厂的概率大约
内向的柠檬精在研究求职打法:现在就是这样,九二科班非科班硕分,九二科班非科班本分,双非一本科班分,双非一本非科班分,非一本再分。。。总体就业率看着是不高,但对于想找工作的这批人来说,竞争的人真的好多好多
点赞 评论 收藏
分享
评论
7
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务