个人技术博客——Axios基础使用技术

222200120_陈潇涵 2024-12-20 23:35:34
这个作业属于哪个课程福州大学软件工程 2024
这个作业要求在哪里软件工程实践总结&个人技术博客
这个作业的目标个人技术博客
其他参考文献

 

目录

Axios 使用总结

概述

1.技术详述

1.1 安装 Axios

1.2 请求拦截器和响应拦截器

1.3 请求取消

2.技术详概

2.1 选择 Axios 的原因

2.2 在微信小程序中集成 Axios

2.3 遇到的问题:请求失败时无法统一处理

2.4 问题:跨域请求错误

3.技术总结


 

Axios 使用总结

概述

Axios 是一个基于 Promise 的 HTTP 库,用于浏览器和 Node.js 中发送 HTTP 请求。它提供了非常简洁的 API,支持 GET、POST、PUT、DELETE 等常用请求方式。在前端开发中,Axios 常用于向后端服务器发送请求并处理响应数据。学习 Axios 是因为它简化了 AJAX 请求,支持拦截器、请求取消等高级功能,解决了原生 XMLHttpRequest 和 fetch 的一些限制。

1.技术详述

1.1 安装 Axios

我们通过 npm 安装 Axios:

npm install axios

1.2 请求拦截器和响应拦截器

在 Axios 中,拦截器可以在请求发送前和响应返回后做一些公共操作。

1.2.1 请求拦截器

instance.interceptors.request.use(
  function(config) {
    // 在发送请求前附加 token
    var token = localStorage.getItem("token");
    if (token) {
      config.headers['Authorization'] = 'Bearer ' + token;
    }
    return config;
  },
  function(error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

 

1.2.2 响应拦截器

instance.interceptors.response.use(
  function(response) {
    // 直接返回响应数据
    return response;
  },
  function(error) {
    // 检查错误响应并处理特定的状态码
    if (error.response && error.response.status === 401) {
      // 如果是认证错误,则在控制台输出
      console.log("Authentication failed");
    }
    // 将错误传递下去
    return Promise.reject(error);
  }
);

 

1.3 请求取消

有时我们需要取消某个请求,比如在用户快速切换页面时,可以避免不必要的请求。Axios 提供了 CancelToken 来实现这一功能。

// 定义取消请求的变量
var cancelRequest;

// 创建axios的CancelToken实例
var cancelTokenSource = axios.CancelToken.source();

// 发起GET请求
instance.get("/users", {
  cancelToken: cancelTokenSource.token // 使用cancel token
})
.then(function(response) {
  // 请求成功时打印响应数据
  console.log(response.data);
})
.catch(function(error) {
  // 检查请求是否被取消
  if (axios.isCancel(error)) {
    console.log("Request canceled", error.message);
  } else {
    // 打印出其他错误
    console.error("Error:", error);
  }
});

// 取消请求的函数赋值
cancelRequest = cancelTokenSource.cancel;

// 执行取消操作
cancelRequest("Operation canceled by the user.");


 

 

2.技术详概

2.1 选择 Axios 的原因

  • 拦截功能强化:通过设置拦截器,Axios 优化了请求发送前和接收响应后的统一处理流程。这使得像自动追加 token 和统一处理响应错误等操作变得简单。

  • 优化的请求封装:Axios 的高效 API 简化了对服务请求的管理,相较于微信的 `wx.request`,它让代码更加简洁、封装性更强。

  •  

    Promise 的完美集成:Axios 基于 Promise 设计,它与 async/await 无缝配合,极大提升了代码的逻辑清晰性和阅读体验。

     

     

2.2 在微信小程序中集成 Axios

在微信小程序中使用 Axios,需要将 Axios 库引入并进行封装。

1. 安装并引入 Axios

npm install axios --save

2. 在项目的 utils 目录下创建一个 request.js 文件,进行封装

```javascript
// utils/request.js

import axios from 'axios';

// 创建 axios 实例
const request = axios.create({
  baseURL: 'https://api.example.com', // 设定基准 URL
  timeout: 5000, // 定义请求超时时长
  headers: {
    'Content-Type': 'application/json' // 设置默认请求头
  }
});

// 设置请求拦截器,用于在请求头中携带 token
request.interceptors.request.use(
  (config) => {
    // 从本地存储获取 token
    const token = wx.getStorageSync('token');
    // 如果 token 存在,则在请求头中携带
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 设置响应拦截器,用于统一处理错误
request.interceptors.response.use(
  (response) => {
    // 直接返回响应数据
    return response.data;
  },
  (error) => {
    // 弹窗提示请求错误
    wx.showToast({
      title: '请求失败',
      icon: 'none'
    });
    return Promise.reject(error);
  }
);

// 导出 axios 实例
export default request;

2.3 遇到的问题:请求失败时无法统一处理

在项目中,如果多个请求都失败,将难以统一处理错误,尤其是在多个 API 请求时。
解决方案:
使用 Axios 的响应拦截器,在请求失败时统一处理错误。

```javascript
instance.interceptors.response.use(
  response => response,
  error => {
    console.error("Global error handler:", error);
    return Promise.reject(error);
  }
);
```

2.4 问题:跨域请求错误

在开发过程中,遇到了一些跨域问题。浏览器默认会阻止跨域请求。
解决方案:
配置 CORS 代理服务。

instance.defaults.headers.common["Access-Control-Allow-Origin"] = "*";

3.技术总结

Axios, 作为一个强大的 HTTP 客户端库,在我的开发实践中起到了核心作用。它不仅使得微信小程序中的网络请求处理变得更加高效,而且增强了代码的整洁性与可维护性。通过深入研究文档和积极应对实际问题,我不仅解决了使用过程中遇到的挑战,还提升了自己的编程技巧。Axios 的拦截器和请求取消机制允许我优化 HTTP 请求的管理,从而提升用户体验。我实现了请求的封装,统一的错误处理,以及请求重试机制,这些都使项目的网络层变得更加稳定和可扩展。此次经历不仅让我对 HTTP 请求和响应的处理流程有了更深刻的理解,也为我未来的项目开发提供了丰富的经验。

...全文
185 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
**项目名称:** 基于Vue.js与Spring Cloud架构的博客系统设计与开发——微服务分布式应用实践 **项目概述:** 本项目为计算机科学与技术专业本科毕业设计成果,旨在设计并实现一个采用前后端分离架构的现代化博客平台。系统前端基于Vue.js框架构建,提供响应式用户界面;后端采用Spring Cloud微服务架构,通过服务拆分、注册发现、配置中心及网关路由等技术,构建高可用、易扩展的分布式应用体系。项目重点探讨微服务模式下的系统设计、服务治理、数据一致性及部署运维等关键问题,体现了分布式系统在Web应用中的实践价值。 **技术架构:** 1. **前端技术栈:** Vue.js 2.x、Vue Router、Vuex、Element UI、Axios 2. **后端技术栈:** Spring Boot 2.x、Spring Cloud (Eureka/Nacos、Feign/OpenFeign、Ribbon、Hystrix、Zuul/Gateway、Config) 3. **数据存储:** MySQL 8.0(主数据存储)、Redis(缓存与会话管理) 4. **服务通信:** RESTful API、消息队列(可选RabbitMQ/Kafka) 5. **部署与运维:** Docker容器化、Jenkins持续集成、Nginx负载均衡 **核心功能模块:** - 用户管理:注册登录、权限控制、个人中心 - 文章管理:富文本编辑、分类标签、发布审核、评论互动 - 内容展示:首页推荐、分类检索、全文搜索、热门排行 - 系统管理:后台仪表盘、用户与内容监控、日志审计 - 微服务治理:服务健康检测、动态配置更新、熔断降级策略 **设计特点:** 1. **架构解耦:** 前后端完全分离,通过API网关统一接入,支持独立开发与部署。 2. **服务拆分:** 按业务域划分为用户服务、文章服务、评论服务、文件服务等独立微服务。 3. **高可用设计:** 采用服务注册发现机制,配合负载均衡与熔断器,提升系统容错能力。 4. **可扩展性:** 模块化设计支持横向扩展,配置中心实现运行时动态调整。 **项目成果:** 完成了一个具备完整博客功能、具备微服务典型特征的分布式系统原型,通过容器化部署验证了多服务协同运行的可行性,为云原生应用开发提供了实践参考。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

239

社区成员

发帖
与我相关
我的任务
社区管理员
  • FZU_SE_teacherW
  • 202501福大-软件工程实践-W班
  • D's Honey
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧