新闻中心

J*aScript网络请求_Axios与Fetch API高级用法

2025-11-22
浏览次数:
返回列表
Axios和Fetch是前端网络请求核心工具,Axios支持拦截器、自动JSON转换和请求取消,适合复杂项目;Fetch为浏览器原生API,轻量且支持流处理,适用于简单场景。通过自定义实例、封装函数、统一错误处理及使用AbortController取消请求,可提升代码可维护性和健壮性。两者可根据项目需求选择或共存,关键在于规范统一。

javascript网络请求_axios与fetch api高级用法

在现代前端开发中,网络请求是与后端交互的核心手段。Axios 和 Fetch API 是目前最常用的两种方式。它们各有优势,掌握其高级用法能显著提升代码的可维护性和健壮性。

1. Axios 高级配置与拦截器

Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js,提供了丰富的配置选项。

自定义实例:可以创建独立的 Axios 实例,设置基础 URL、超时时间、请求头等。

const apiClient = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 5000,
  headers: { 'Content-Type': 'application/json' }
});

这样所有通过 apiClient 发出的请求都会自动携带这些配置。

请求与响应拦截器:可用于统一处理认证、日志、错误提示等。

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

// 响应拦截器
apiClient.interceptors.response.use(
  response => response,
  error => {
    if (error.response?.status === 401) {
      // 处理未授权
      localStorage.removeItem('token');
      window.location.href = '/login';
    }
    return Promise.reject(error);
  } );

拦截器极大简化了全局逻辑处理,避免重复代码。

2. Fetch API 高级用法与封装

Fetch 是浏览器原生提供的 API,无需引入额外库,但默认不发送 Cookie,且不会 reject HTTP 错误状态码。

手动处理响应状态:需检查 ok 属性或 status 来判断请求是否成功。

fetch('/api/user', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify(data),
  credentials: 'include' // 携带 Cookie
})
.then(res => {
  if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`);
  return res.json();
})
.then(data => console.log(data))
.catch(err => console.error('Fetch error:', err));

封装 Fetch 提高复用性:可以封装通用逻辑,如自动解析 JSON、统一错误处理。

Kreado AI Kreado AI

Kreado AI是一个多语言AI视频创作平台,只需输入文本或关键词,即可创作真实/虚拟人物的多语言口播视频。 为创作者提供AI赋能

Kreado AI 182 查看详情 Kreado AI async function request(url, options = {}) {
  const config = {
    ...options,
    headers: {
      'Content-Type': 'application/json',
      ...options.headers
    }
  };

  const res = await fetch(url, config);

  if (!res.ok) {
    const errorData = await res.json().catch(() => ({}));
    throw new Error(errorData.message || res.statusText);
  }

  return res.json();
}

使用封装后的函数更简洁:

request('/api/profile', { method: 'GET' })
  .then(data => console.log(data))
  .catch(err => alert(err.message));

3. 错误处理与取消请求

无论是 Axios 还是 Fetch,合理的错误处理和请求取消机制对用户体验至关重要。

Axios 支持 CancelToken(旧)或 AbortController(新)取消请求:

const controller = new AbortController();

apiClient.get('/search', {
  params: { q: 'query' },
  signal: controller.signal
})
.then(res => console.log(res.data))
.catch(thrown => {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  }
});

// 取消请求
controller.abort();

Fetch 原生支持 AbortController:适合防止重复请求或页面切换时清理。

const controller = new AbortController();
fetch('/data', { signal: controller.signal })
  .catch(e => {
    if (e.name === 'AbortError') {
      console.log('Fetch aborted');
    }
  });

// 手动取消
controller.abort();

4. 对比与选型建议

Axios 和 Fetch 各有适用场景。

  • Axios 自动转换 JSON,支持拦截器,兼容性好,适合复杂项目。
  • Fetch 更轻量,原生支持流式处理,适合简单场景或追求零依赖的项目。
  • 若需上传进度监听,Axios 提供 onUploadProgress 回调,Fetch 目前无法直接实现。
  • Fetch 在处理大文件或流数据时更具潜力,可通过 response.body 获取 ReadableStream。

实际开发中,可根据团队习惯、项目规模和功能需求选择。也可以共存,关键在于统一规范。

基本上就这些,掌握这些高级技巧能让网络请求更可控、更安全、更易维护。

以上就是J*aScript网络请求_Axios与Fetch API高级用法的详细内容,更多请关注其它相关文章!


# 自定义  # 南京seo排名企业  # 东丽区营销推广网点地址  # 营销号推广主播  # 百度网络营销推广案例  # 南康seo优化加盟  # 抖音seo热门视频  # 山西优化暂住证办理网站  # 临沂网站建设信息  # 咏春电影网站建设  # 资阳网站推广方案  # 可根据  # 多语言  # 如何处理  # 关键在于  # 各有  # javascript  # 是一个  # 如何实现  # 拦截器  # 关键词  # axios  # app  # 浏览器  # cookie  # node  # json  # node.js  # 前端  # js  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址  ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版  WordPress插件开发:正确注册卸载钩子与避免常见陷阱  Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation  VS Code远程开发时如何处理文件权限问题  CSS Grid如何控制元素对齐_align-items与justify-items组合使用  俄罗斯搜索引擎Yandex指南 附2025年免登录官网入口  如何在网页中实现特定地点的随机图片展示  淘宝支付提示失败如何解决 淘宝支付流程优化方法  蛙漫画网页版全站入口 蛙漫热门作品免费浏览  在J*aScript中复现SciPy的B样条拟合与求值:关键考量  C++ string find函数返回值npos详解_C++字符串查找失败的判断条件  铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧  qq音乐在线播放入口_qq音乐电脑版登录链接  MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具  KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明  CSS实现侧边栏导航项全宽圆角悬停背景效果  解决深度学习模型训练初期异常高损失与完美验证准确率问题  漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口  J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析  iCloud登录入口网页版 苹果iCloud官网登录  TikTok网页版直接登录 TikTok网页端官方平台入口  vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法  HTML空白字符处理机制:渲染、DOM与编码实践  双系统安装时,如何设置默认启动系统? msconfig命令了解一下!  Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注  J*a 递归快速排序中静态变量的状态管理与陷阱  QQ邮箱在线登录平台 QQ邮箱个人邮箱网页版入口  钉钉视频会议声音异常如何处理 钉钉会议音频修复技巧  win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】  Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐  React中useState与局部变量:理解组件状态管理与渲染机制  精准捕获:如何在页面中监听除特定元素外的所有点击事件  优化LangChain文档加载与ChromaDB集成:解决多文档处理与分块问题  利用Bokeh CustomJS动态控制DataTable列可见性  Python大型XML文件高效流式解析教程  拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧  J*aScript中如何高效提取对象指定属性  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法  极兔快递快件信息查询系统 极兔快递官网运单号追踪  CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题  优化Log4j2控制台输出性能:解决异步日志瓶颈  J*aScript数据结构转换:将对象数组按类别分组  Mac怎么查看崩溃日志_Mac控制台错误报告分析  PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比  J*a应用集成GitHub CLI与API认证指南  菜鸟取件码是什么怎么查 最全查询渠道汇总  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版 

搜索