面试官: “ 请你说一下什么是 axios ? ”

77 阅读3分钟

一、Axios 核心定义

Axios 是一个基于 Promise 的 HTTP 客户端,专门用于浏览器和 Node.js 环境中发送 AJAX 请求。

  • 本质:它不是原生 JS 的功能,而是一个第三方库(可以理解为对原生 AJAX(XHR/fetch)的封装和增强)。
  • 核心目标:解决原生 AJAX(XHR)语法繁琐、fetch API 功能不全(如不支持超时、取消请求)的问题,让发送 HTTP 请求更简单、更易用。
  • 底层:在浏览器端,Axios 底层还是用 XMLHttpRequest 实现;在 Node.js 端,它用http模块实现,做到了前后端请求统一语法

二、Axios 对比原生 AJAX 的核心优势

相比你刚学的原生 XHR/fetch,Axios 的优势非常明显:

  1. 语法极简:一行代码就能发送请求,无需手动创建 XHR 对象、配置状态监听。
  2. Promise 化:天然支持 Promise,可配合async/await写出同步风格的异步代码,可读性更高。
  3. 功能丰富:内置请求 / 响应拦截、超时处理、取消请求、自动转换 JSON 数据、防止 CSRF 等。
  4. 跨平台:一套代码可在浏览器和 Node.js 中运行,无需适配。
  5. 错误处理更友好:统一的错误捕获机制,区分网络错误、请求错误、响应错误。

三、Axios 基本使用

1. 前置准备:引入 Axios

使用 Axios 前需要先引入,有两种方式:

  • 浏览器端:通过 CDN 引入

    <!-- 在HTML中引入Axios CDN -->
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
  • Node.js 端:先安装再引入

    # 安装Axios
    npm install axios
    
    // 引入Axios
    const axios = require('axios');
    // 或ES6模块化
    import axios from 'axios';
    

2. 核心用法示例

(1)发送 GET 请求(最常用)
// 方式1:基础用法(then/catch)
axios.get('https://jsonplaceholder.typicode.com/todos/1')
  .then(response => {
    // 响应数据默认已解析为JSON,无需手动JSON.parse
    console.log('请求成功:', response.data);
    // 局部更新页面(和原生AJAX一样)
    document.getElementById('result').innerHTML = `
      <h3>任务标题:${response.data.title}</h3>
      <p>是否完成:${response.data.completed ? '是' : '否'}</p>
    `;
  })
  .catch(error => {
    // 统一捕获错误(网络错误/响应错误)
    console.error('请求失败:', error.message);
  });

// 方式2:结合async/await(更优雅,ES7+)
async function getTodo() {
  try {
    const response = await axios.get('https://jsonplaceholder.typicode.com/todos/1');
    console.log('请求成功:', response.data);
  } catch (error) {
    console.error('请求失败:', error.message);
  }
}
// 调用函数
getTodo();
(2)发送 POST 请求(提交数据)
// 提交JSON数据
async function postData() {
  try {
    const response = await axios.post(
      'https://jsonplaceholder.typicode.com/posts',
      { title: '测试标题', body: '测试内容', userId: 1 } // 请求体数据
    );
    console.log('提交成功,返回数据:', response.data);
  } catch (error) {
    console.error('提交失败:', error.message);
  }
}
postData();
(3)自定义请求配置(高级用法)
// 统一配置请求(如设置基础URL、超时、请求头)
const axiosInstance = axios.create({
  baseURL: 'https://jsonplaceholder.typicode.com', // 基础URL
  timeout: 5000, // 超时时间(5秒)
  headers: { 'Content-Type': 'application/json' } // 请求头
});

// 使用配置好的实例发送请求
axiosInstance.get('/todos/1')
  .then(res => console.log(res.data))
  .catch(err => console.error(err));

四、Axios 核心特性示例:拦截器

拦截器是 Axios 的核心亮点,可在请求发送前、响应返回后统一处理逻辑(比如添加 token、统一错误提示):

// 请求拦截器:发送请求前执行(比如添加登录token)
axios.interceptors.request.use(
  config => {
    // 在请求头添加token
    config.headers.Authorization = 'Bearer ' + localStorage.getItem('token');
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 响应拦截器:响应返回后执行(比如统一处理错误)
axios.interceptors.response.use(
  response => {
    // 只返回响应数据,简化后续使用
    return response.data;
  },
  error => {
    // 统一提示错误
    alert('请求出错:' + error.message);
    return Promise.reject(error);
  }
);

总结

  1. Axios 是封装后的 AJAX 工具库,基于 Promise,比原生 XHR/fetch 更易用、功能更全。
  2. 核心优势:语法简洁、支持 Promise/async-await、跨平台、内置拦截器 / 超时 / 取消请求等功能。
  3. 核心用法:axios.get()/axios.post() 发送请求,结合async/await编写优雅的异步代码,拦截器可统一处理请求 / 响应逻辑。
  4. 实际开发中,Axios 几乎是前端发送 HTTP 请求的首选工具,替代了繁琐的原生 AJAX 写法。