用于 JavaScript (Node.js) 的 HTTP 客户端:顶级网络请求库
现代 Node.js 开发几乎离不开与外部服务的交互。无论是 REST API、GraphQL 端点还是数据流传输,您都需要一个可靠的 HTTP 客户端。在本文中,我们将介绍 Node.js 环境中执行 HTTP 请求的最佳库、它们的特点以及使用示例。
1. Axios — 通用之选
Axios 是用于 Node.js 和浏览器的最流行的 HTTP 客户端。它基于 Promise,支持拦截器 (interceptors)、自动 JSON 转换和请求取消。
安装
npm install axiosGET 请求示例
const axios = require('axios');
async function getUsers() { try { const response = await axios.get('https://jsonplaceholder.typicode.com/users'); console.log(response.data); } catch (error) { console.error('错误:', error.message); }}
getUsers();特点:
- 支持
CancelToken用于取消请求 - 自动处理 HTTP 错误(4xx 和 5xx 状态码)
- 既可在服务端也可在浏览器中运行
- 支持上传/下载进度
2. Got — 性能与灵活性
Got 是一个轻量且快速的库,专为 Node.js 设计。它通过直接使用 http 和 https 模块提供了丰富的 API 和出色的性能。
安装
npm install gotPOST 请求示例
const got = require('got');
async function createPost() { try { const response = await got.post('https://jsonplaceholder.typicode.com/posts', { json: { title: '新文章', body: '文章内容', userId: 1 }, responseType: 'json' }); console.log(response.body); } catch (error) { console.error('错误:', error.message); }}
createPost();特点:
- 支持流和分页
- 内置重试 (retry) 支持
- 支持 Cookie 和缓存
- 支持 HTTP/2(通过
http2-wrapper)
3. Node.js Fetch API — 原生标准
从 Node.js 18 开始,Fetch API 成为了内置模块(全局可用)。它实现了与浏览器中相同的 API,从而简化了通用代码的编写。
使用示例
async function fetchData() { try { const response = await fetch('https://jsonplaceholder.typicode.com/posts/1'); if (!response.ok) throw new Error('HTTP 错误: ' + response.status); const data = await response.json(); console.log(data); } catch (error) { console.error('错误:', error.message); }}
fetchData();特点:
- 无需安装 — 内置于 Node.js 18+
- 标准 API,前端开发者熟悉
- 支持
AbortController用于取消请求 - 与 Axios/Got 相比功能有限(例如,没有拦截器)
4. undici — 高性能 HTTP/1.1 客户端
undici 是一个快速、现代的 HTTP 客户端,是 Node.js 内置 Fetch 的基础。它针对最大吞吐量进行了优化。
安装
npm install undici请求示例
const { request } = require('undici');
async function fetchWithUndici() { try { const { statusCode, body } = await request('https://jsonplaceholder.typicode.com/users'); const data = await body.json(); console.log('状态码:', statusCode); console.log('数