当前位置:首页 > 文章列表 > 文章 > 前端 > Axios 与 Fetch:哪个最适合 HTTP 请求?

Axios 与 Fetch:哪个最适合 HTTP 请求?

来源:dev.to 2024-11-24 12:31:08 0浏览 收藏

积累知识,胜过积蓄金银!毕竟在文章开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《Axios 与 Fetch:哪个最适合 HTTP 请求?》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

在 javascript 中发出 http 请求的方法有很多,但最流行的两种是 axios 和本机 fetch() api。在这篇文章中,我们将比较和对比这两种方法,以确定哪一种更适合不同的场景。

Axios 与 Fetch:哪个最适合 HTTP 请求?

http 请求的基本作用

http 请求是与 web 应用程序中的服务器和 api 进行通信的基础。 axios 和 fetch() 都被广泛用于有效地促进这些请求。让我们深入研究它们的功能,看看它们如何叠加。

什么是 axios?

axios 是一个第三方库,它提供基于 promise 的 http 客户端来发出 http 请求。它以其简单性和灵活性而闻名,在 javascript 社区中得到广泛使用。

axios基本语法

axios(config)
  .then(response => console.log(response.data))
  .catch(error => console.error('error:', error));

axios 的主要特点:

  • 配置灵活性:同时接受 url 和配置对象。
  • 自动数据处理: 自动将数据与 json 相互转换。
  • 错误处理:自动处理http错误状态代码,将它们传递给catch块。
  • 简化响应:直接在响应对象的 data 属性中返回服务器数据。
  • 简化的错误管理:提供更简化的错误处理机制。

例子:

axios({
  method: 'post',
  url: 'https://api.example.com/data',
  data: { key: 'value' }
})
  .then(response => console.log(response.data))
  .catch(error => {
    if (error.response) {
      console.error('server responded with:', error.response.status);
    } else if (error.request) {
      console.error('no response received');
    } else {
      console.error('error:', error.message);
    }
  });

为什么使用 axios?

  • 自动 json 数据转换: 无缝地将数据与 json 相互转换。
  • 响应超时:允许设置请求超时。
  • http 拦截器: 让您拦截请求和响应。
  • 下载进度:跟踪下载和上传的进度。
  • 同时请求:同时处理多个请求并合并响应。

什么是抓取?

fetch() 是现代 javascript 中的内置 api,所有现代浏览器都支持。它是一个异步 web api,以 promise 的形式返回数据。

fetch() 的特点:

  • 基本语法: 简单明了,采用 url 和可选选项对象。
  • 向后兼容性:可以在带有polyfills的旧版浏览器中使用。
  • 可定制:允许对标头、正文、方法、模式、凭据、缓存、重定向和引用策略进行详细控制。

如何使用axios发出http请求

首先,使用npm或yarn安装axios:

npm install axios
# or
yarn add axios
# or
pnpm install axios

您还可以通过 cdn 包含 axios:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

以下是如何使用 axios 发出 get 请求:

import axios from 'axios';

axios.get('https://example.com/api')
  .then(response => console.log(response.data))
  .catch(error => console.error(error));

使用 fetch 发出 http 请求

由于 fetch() 是内置的,因此您不需要安装任何东西。以下是如何使用 fetch() 发出 get 请求:

fetch('https://example.com/api')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));

请注意:

  • 数据处理: axios 自动将数据与 json 相互转换,而使用 fetch() 时,您必须手动调用 response.json()。
  • 错误处理: axios 处理 catch 块内的错误,而 fetch() 仅拒绝网络错误的承诺,而不拒绝 http 状态错误。

fetch 的基本语法

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('error:', error));

主要特点:

  • 简单参数: 采用 url 和可选配置对象。
  • 手动数据处理:需要手动将数据转换为字符串。
  • 响应对象:返回包含完整响应信息的响应对象。
  • 错误处理:需要手动检查 http 错误的响应状态代码。

例子:

fetch('https://api.example.com/data', {
  method: 'post',
  headers: { 'content-type': 'application/json' },
  body: json.stringify({ key: 'value' })
})
  .then(response => {
    if (!response.ok) throw new error('http error ' + response.status);
    return response.json();
  })
  .then(data => console.log(data))
  .catch(error => console.error('error:', error));

axios 与 fetch 的比较

发送带有查询参数的 get 请求

axios:

axios.get('/api/data', { params: { name: 'alice', age: 25 } })
  .then(response => { /* handle response */ })
  .catch(error => { /* handle error */ });

获取:

const url = new url('/api/data');
url.searchparams.append('name', 'alice');
url.searchparams.append('age', 25);

fetch(url)
  .then(response => response.json())
  .then(data => { /* handle data */ })
  .catch(error => { /* handle error */ });

使用 json 正文发送 post 请求

axios:

axios.post('/api/data', { name: 'bob', age: 30 })
  .then(response => { /* handle response */ })
  .catch(error => { /* handle error */ });

获取:

fetch('/api/data', {
  method: 'post',
  headers: { 'content-type': 'application/json' },
  body: json.stringify({ name: 'bob', age: 30 })
})
  .then(response => response.json())
  .then(data => { /* handle data */ })
  .catch(error => { /* handle error */ });

设置请求超时

axios:

axios.get('/api/data', { timeout: 5000 }) // 5 seconds
  .then(response => { /* handle response */ })
  .catch(error => { /* handle error */ });

获取:

const controller = new abortcontroller();
const signal = controller.signal;

settimeout(() => controller.abort(), 5000); // abort after 5 seconds

fetch('/api/data', { signal })
  .then(response => response.json())
  .then(data => { /* handle data */ })
  .catch(error => { /* handle error */ });

使用 async/await 语法

axios:

async function getdata() {
  try {
    const response = await axios.get('/api/data');
    // handle response
  } catch (error) {
    // handle error
  }
}

获取:

async function getdata() {
  try {
    const response = await fetch('/api/data');
    const data = await response.json();
    // handle data
  } catch (error) {
    // handle error
  }
}

向后兼容性

axios:

  • 需要安装并包含在您的项目中。
  • 通过 promise 和其他现代 javascript 功能的 polyfills 支持旧版浏览器。
  • 积极维护与新环境的兼容性。

获取:

  • 现代浏览器的本机支持。
  • 可以进行填充以支持旧版浏览器。
  • 由浏览器供应商自动更新。

错误处理

axios:

处理 catch 块中的错误,并将 2xx 之外的任何状态代码视为错误:

try {
  const response = await axios.get('/api/data');
  // handle response
} catch (error) {
  console.log(error.response.data);
}

获取:

需要手动状态检查:

try {
  const response = await fetch('/api/data');
  if (!response.ok) throw new Error('HTTP error ' + response.status);
  const data = await response.json();
  // handle data
} catch (error) {
  console.log(error.message);
}

axios 与 fetch:哪个最好?

没有明确的答案,这取决于您的要求:

  • 如果您需要自动 json 数据转换、http 拦截器和高级错误处理等功能,请使用 axios
  • 如果您想要一个具有广泛自定义选项的本机、轻量级解决方案,请使用 fetch()

使用 echoapi 生成 axios/fetch 代码

Axios 与 Fetch:哪个最适合 HTTP 请求?

echoapi 是一个一体化协作 api 开发平台,提供用于设计、调试、测试和模拟 api 的工具。 echoapi 可以自动生成用于发出 http 请求的 axios 代码。

使用 echoapi 生成 axios 代码的步骤:

1. 打开echoapi并创建一个新请求。

img_v3_02f4_8b472677-2f6f-4dac-aae1-e8b043fedfbg.jpg

2. 输入api端点、标头和参数,然后单击“代码片段”。

Axios 与 Fetch:哪个最适合 HTTP 请求?

3. 选择“生成客户端代码”。

Axios 与 Fetch:哪个最适合 HTTP 请求?

4. 将生成的 axios 代码复制并粘贴到您的项目中。

Axios 与 Fetch:哪个最适合 HTTP 请求?

结论

axios 和 fetch() 都是在 javascript 中发出 http 请求的强大方法。选择最适合您的项目需求和偏好的一种。使用 echoapi 等工具可以增强您的开发工作流程,确保您的代码准确高效。快乐编码!




本篇关于《Axios 与 Fetch:哪个最适合 HTTP 请求?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!

版本声明
本文转载于:dev.to 如有侵犯,请联系study_golang@163.com删除
如何使用 JavaScript 实现 CSS sticky 效果,即使元素高度超过浏览器窗口高度? 
如何使用 JavaScript 实现 CSS sticky 效果,即使元素高度超过浏览器窗口高度?
上一篇
如何使用 JavaScript 实现 CSS sticky 效果,即使元素高度超过浏览器窗口高度?
CSS Grid 布局中,如何实现等宽排列且避免多余空间?
下一篇
CSS Grid 布局中,如何实现等宽排列且避免多余空间?
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 茅茅虫AIGC检测:精准识别AI生成内容,保障学术诚信
    茅茅虫AIGC检测
    茅茅虫AIGC检测,湖南茅茅虫科技有限公司倾力打造,运用NLP技术精准识别AI生成文本,提供论文、专著等学术文本的AIGC检测服务。支持多种格式,生成可视化报告,保障您的学术诚信和内容质量。
    66次使用
  • 赛林匹克平台:科技赛事聚合,赋能AI、算力、量子计算创新
    赛林匹克平台(Challympics)
    探索赛林匹克平台Challympics,一个聚焦人工智能、算力算法、量子计算等前沿技术的赛事聚合平台。连接产学研用,助力科技创新与产业升级。
    87次使用
  • SEO  笔格AIPPT:AI智能PPT制作,免费生成,高效演示
    笔格AIPPT
    SEO 笔格AIPPT是135编辑器推出的AI智能PPT制作平台,依托DeepSeek大模型,实现智能大纲生成、一键PPT生成、AI文字优化、图像生成等功能。免费试用,提升PPT制作效率,适用于商务演示、教育培训等多种场景。
    92次使用
  • 稿定PPT:在线AI演示设计,高效PPT制作工具
    稿定PPT
    告别PPT制作难题!稿定PPT提供海量模板、AI智能生成、在线协作,助您轻松制作专业演示文稿。职场办公、教育学习、企业服务全覆盖,降本增效,释放创意!
    85次使用
  • Suno苏诺中文版:AI音乐创作平台,人人都是音乐家
    Suno苏诺中文版
    探索Suno苏诺中文版,一款颠覆传统音乐创作的AI平台。无需专业技能,轻松创作个性化音乐。智能词曲生成、风格迁移、海量音效,释放您的音乐灵感!
    87次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码