JavaScript (Node.js) 的 HTTP 客户端:用于 API 开发的热门库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

用于 JavaScript (Node.js) 的 HTTP 客户端:顶级网络请求库



现代 Node.js 开发几乎离不开与外部服务的交互。无论是 REST API、GraphQL 端点还是数据流传输,您都需要一个可靠的 HTTP 客户端。在本文中,我们将介绍 Node.js 环境中执行 HTTP 请求的最佳库、它们的特点以及使用示例。



1. Axios — 通用之选

Axios 是用于 Node.js 和浏览器的最流行的 HTTP 客户端。它基于 Promise,支持拦截器 (interceptors)、自动 JSON 转换和请求取消。



安装

npm install axios


GET 请求示例

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 got


POST 请求示例

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('数

推荐