当前位置: 首页 > news >正文

Node.js 19中fetch API替代axios异步请求兼容性怎么样?怎么测试?

Node.js 18+ 已原生支持全局 fetch API,但截至 2024 年 6 月的对比数据显示,Axios 在请求拦截、自动 JSON 转换和 IE11+ 兼容性方面仍保持优势,而 fetch 在 Node.js 环境中需要额外处理超时和错误状态码。

原因分析

Fetch API 是 modern 浏览器内置的标准 JavaScript API,Node.js 从 18 版本开始原生集成 fetch,无需额外安装依赖。根据 2024 年 6 月 18 日阿里云开发者社区的对比,fetch 返回 Promise 对象,但只在网络错误时 reject,HTTP 状态码如 404、500 不会触发 catch 块,需要手动检查 response.ok。Axios 作为第三方库,通过 npm 安装后在浏览器和 Node.js 环境中均完整支持,自动处理 JSON 转换和错误统一格式。

兼容性测试方案

第一步:验证 Node.js 版本和 fetch 可用性。在终端执行 node -v 确认版本为 19.x,然后运行 console.log(typeof fetch) 应返回 function。如果返回 undefined,说明需要安装 node-fetch 包,执行 npm install node-fetch。

第二步:基础请求对比测试。使用以下代码分别测试 fetch 和 axios 的 GET 请求:
fetch('https://api.example.com/data').then(response => response.json()).then(data => console.log(data)).catch(error => console.error('Error:', error));
axios.get('https://api.example.com/data').then(response => console.log(response.data)).catch(error => console.error('Error:', error));

第三步:超时控制测试。fetch 本身不支持 timeout,需结合 AbortController 实现:const controller = new AbortController(); fetch(url, {signal: controller.signal}); 超时后调用 controller.abort() 触发 TypeError('aborted')。Axios 内置超时支持,配置 timeout: 5000 即可。

第四步:认证与 Cookie 测试。fetch 默认不携带 Cookie,发送请求时需显式配置 credentials: 'include'(等同于 XHR 的 withCredentials = true)。JWT 场景常用 Authorization header: headers: {'Authorization': 'Bearer xxx'}。

争议方案与适用场景

方案一:完全替换为 fetch。适用场景为简单项目、不需要请求拦截和进度监控的情况。根据 2024 年 7 月 12 日的教程,fetch 提供现代化和原生的方式,但需要手动处理 JSON 解析和错误检查。

方案二:混合使用。在 Node.js 服务端使用 axios 获得完整功能支持,在浏览器端使用 fetch 减少包体积。根据 2025 年 11 月 21 日的资料,axios 支持 XSRF 保护和取消请求,适合企业级应用。

方案三:封装统一层。创建简易版 axios 工具,内部采用 fetch 实现,添加请求及响应拦截和超时取消功能。根据 2022 年 12 月 17 日的案例,浏览器环境使用 fetch 摒弃 xhr 封装,Node 环境使用 http 模块。

注意事项

注意 1:fetch 在 Node.js 18 之前需要 polyfill,IE 浏览器不支持 fetch API,如需兼容 IE11+ 应选择 axios。

注意 2:fetch 响应体需手动解析,使用 response.json()、response.text() 或 response.blob(),不能直接获取数据。

注意 3:业务错误(如 401)需在 then 中用!response.ok 判断,网络错误、abort、DNS 失败等统一走 catch。

注意 4:POST 提交 JSON 需 stringify 并设 headers,body 必须是字符串,不能直接传对象,必须显式设置 Content-Type: application/json。

参考来源

来源:阿里云开发者社区 - 前端 HTTP 请求库 Axios 与 Fetch 从功能到场景的深度对比选型(2024 年 6 月 18 日发布)

来源:CSDN 博客 - Axios 与 Fetch API 深度对比:选择最适合的 HTTP 客户端(2025 年 8 月 22 日)

来源:技术教程 - 如何用 Fetch API 替代传统的 XMLHttpRequest 异步请求(2026 年 3 月 26 日)

来源:GitHub 案例 - JS 案例:实现一个简易版 axios(2022 年 12 月 17 日)

原文链接:https://www.zjcp.cc/ask/9678.html

http://www.jsqmd.com/news/754789/

相关文章:

  • SwiftGen终极指南:如何用类型安全的方式管理iOS应用资源
  • Windows 上安装 PostgreSQL
  • Bilibili-Evolved WebSocket心跳检测终极指南:如何维持稳定长连接
  • Node-Cron 代码质量提升指南:5个实用ESLint规则详解
  • 基于Docker的代码沙盒tsplay:安全执行与CI/CD集成实战
  • AI自动化内容生成:从原理到实践,打造小红书笔记生成工具
  • C# 13集合表达式配置避坑清单:12个MSDN未文档化的编译器标志(/langversion:13.0隐含风险详解)
  • 未来展望:Spark-Deep-Learning 在 AI 基础设施中的战略地位与发展路线图
  • 2024 AgenticSeek用户满意度报告:2000名开发者如何评价这款100%本地AI助手
  • 深度学习论文实现代码解析:annotated_deep_learning_paper_implementations 完整指南
  • 基于开源大模型构建智能对话系统:HyperChat架构解析与实战部署
  • 提升anon-kode使用效率的7个专家技巧:从新手到高手的进阶之路
  • Lazy Load插件版本迁移终极指南:从1.x到2.x的完整升级方案
  • TACReward框架:AI决策过程可解释性创新实践
  • emilianJR/chilloutmix_NiPrunedFp32Fix模型评估框架:全面质量分析
  • BEIR评估指标详解:NDCG、MAP、Recall、Precision的完整计算原理
  • 开源向量数据库Epsilla:自研内核与云原生架构的RAG实践
  • 【边缘Java调试生死线】:从设备断连到秒级定位——我们用eBPF+JVMTI重构了12类典型故障响应链
  • TaskPlex:为AI编码代理引入工程纪律,用流程对抗幻觉与过度工程
  • JNA函数调用日志分析终极指南:使用ELK栈实现集中化管理
  • Coze Studio数据库读写分离架构:10个关键设计提升AI应用查询性能的终极指南
  • Linux用户权限隔离:为AI代理构建内核级API密钥防火墙
  • 用nRF52832的GPIOTE和PPI实现零CPU占用的按键控制LED(附完整工程)
  • GodotSteam插件:开源游戏引擎接入Steam平台的完整指南
  • tku:提升终端效率的瑞士军刀式命令行工具集
  • Java向量配置的3个致命误区,第2个让Spring Boot应用启动失败率飙升300%(2024 Q2 JDK漏洞通告关联分析)
  • 升级守护者upgrade-guard:智能评估依赖变更风险,保障项目稳定升级
  • 终极指南:Dio请求队列与延迟执行策略优化网络性能
  • Awesome Cursor项目指南:AI代码编辑器的核心技巧与实战工作流
  • 【紧急预警】JDK 22即将废弃System.loadLibrary()默认行为!Java外部函数配置必须在Q3前完成这4项迁移动作