用于 JavaScript (Node.js) 的 HTTP 客户端:顶级库
在现代 Node.js Web 开发中,发送 HTTP 请求是最常见的操作之一。内置的 http 和 https 模块过于底层,因此社区创建了许多便捷的库。在本文中,我们将分析 2025 年 Node.js 的四个最佳 HTTP 客户端:Axios、Got、SuperAgent 和 Node Fetch。您将了解它们的特点、优势,并获得现成的代码示例。
1. Axios — 通用标准
Axios 是 JavaScript 中最流行的 HTTP 客户端。它既能在浏览器中运行,也能在 Node.js 中运行。主要优势:支持 Promise、自动 JSON 转换、请求/响应拦截器以及内置的 XSRF 保护。
const axios = require('axios');
// GET 请求async function getUser() { try { const response = await axios.get('https://api.github.com/users/octocat'); console.log(response.data); } catch (error) { console.error('错误:', error.message); }}
// 带数据的 POST 请求async function createPost() { const response = await axios.post('https://jsonplaceholder.typicode.com/posts', { title: '新文章', body: '文章内容', userId: 1 }, { headers: { 'Content-Type': 'application/json' } }); console.log('已创建:', response.status);}
getUser();createPost();何时选择 Axios:如果您需要一个入门门槛最低、支持上传进度且文档完善的通用工具。
2. Got — 高性能与现代 API
Got 是一个快速且轻量级的 HTTP 客户端,基于 Promise 构建。它提供了丰富的功能:自动重定向、缓存、错误重试、支持流和 Cookie。Got 使用 http2-wrapper 支持 HTTP/2。
const got = require('got');
// 简单的 GET 请求async function fetchData() { const response = await got('https://api.github.com/users/octocat').json(); console.log(response);}
// 带进度条的文件下载async function downloadFile() { const stream = got.stream('https://example.com/file.zip'); stream.on('downloadProgress', (progress) => { console.log(`已下载: ${(progress.percent * 100).toFixed(1)}%`); }); stream.pipe(require('fs').createWriteStream('file.zip'));}
fetchData();何时选择 Got:适用于高负载应用,对速度、流式数据传输支持和扩展配置选项有要求。
3. SuperAgent — 灵活性与链式调用
SuperAgent 是最古老的 HTTP 客户端之一,以其流畅的接口(方法链)而闻名。它支持进度、超时、序列化、文件上传,并且既能在 Node.js 中运行,也能在浏览器中运行。
const superagent = require('superagent');
// 带查询参数的 GET 请求superagent .get('https://api.github.com/search/repositories') .query({ q: 'nodejs', sort: 'stars', order: 'desc' }) .set('Accept', 'application/json') .then(res => { console.log('找到的仓库数:', res.body.total_count); }) .catch(err => console.error(err));
// 发送表单superagent .post('https://httpbin.org/post') .type('form') .send({ username: 'test', password: '12345' }) .then(res => console.log(res.body));何时选择 SuperAgent:如果您喜欢可读性强的链式语法,需要支持旧版 Node.js,或者需要处理复杂的表单和文件操作。
4. Node Fetch — 熟悉的浏览器 API
Node Fetch 是原生浏览器 Fetch API 在 Node.js 中的移植版本。非常适合习惯使用标准 fetch 的开发人员。它轻量、极简,但需要额外的 polyfill 来支持扩展功能。