# @foxglove/node-fetch 中文文档

规范地址：https://npmcn.com/package/%40foxglove/node-fetch/

版本：3\.1\.0
npm 元数据更新时间：2022-04-05T12:09:38.929Z
中文译文更新时间：2026-11-15T10:44:42.092Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40foxglove/node-fetch
原文对照：https://npmcn.com/package/%40foxglove/node-fetch/?lang=original
项目主页：https://github.com/node-fetch/node-fetch
源码仓库：https://github.com/node-fetch/node-fetch

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：198 kB，18 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：^10\.17 \|\| \>=12\.3
- 运行依赖：2 个
- 首次发布：2021-07-15T00:12:33.427Z
- 最新版本发布：2021-07-15T00:12:33.927Z
- 近 30 天下载量：9916（2026-10-16 至 2026-11-14，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 0 个）

## 中文简介

将 API 带入节点的轻量级模块

## 安装

```sh
npm install @foxglove/node-fetch
```

也可以使用：`pnpm add @foxglove/node-fetch`、`yarn add @foxglove/node-fetch`、`bun add @foxglove/node-fetch`

## README

![Node Fetch](https://npmcn.com/package/%40foxglove/node-fetch/docs/media/Banner.svg)  

一个能带来 [获取 API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) 到节点.

[![Build status](https://github.com/node-fetch/node-fetch/workflows/CI/badge.svg?branch=master)](https://github.com/node-fetch/node-fetch/actions) [![Coverage status](https://img.shields.io/coveralls/github/node-fetch/node-fetch)](https://coveralls.io/github/node-fetch/node-fetch) [![Current version](https://badgen.net/packagephobia/install/node-fetch)](https://packagephobia.now.sh/result?p=node-fetch) [![Install size](https://img.shields.io/npm/v/node-fetch)](https://www.npmjs.com/package/node-fetch) [![Mentioned in Awesome Node.js](https://awesome.re/mentioned-badge.svg)](https://github.com/sindresorhus/awesome-nodejs) [![Discord](https://img.shields.io/discord/619915844268326952?color=%237289DA&label=Discord)](https://discord.gg/Zxbndcm)  
  
**考虑支持我们的开放集体:**  
  
[![Open Collective](https://opencollective.com/node-fetch/donate/button.png?color=blue)](https://opencollective.com/node-fetch)

* * *

-   [动机](https://npmcn.com/package/%40foxglove/node-fetch/#readme-motivation)
-   [特征](https://npmcn.com/package/%40foxglove/node-fetch/#readme-features)
-   [客户端获取的差异](https://npmcn.com/package/%40foxglove/node-fetch/#readme-difference-from-client-side-fetch)
-   [安装](https://npmcn.com/package/%40foxglove/node-fetch/#readme-installation)
-   [装入和配置模块](https://npmcn.com/package/%40foxglove/node-fetch/#readme-loading-and-configuring-the-module)
-   [升级](https://npmcn.com/package/%40foxglove/node-fetch/#readme-upgrading)
-   [常见用途](https://npmcn.com/package/%40foxglove/node-fetch/#readme-common-usage)
    -   [纯文本或 HTML](https://npmcn.com/package/%40foxglove/node-fetch/#readme-plain-text-or-html)
    -   [贾森](https://npmcn.com/package/%40foxglove/node-fetch/#readme-json)
    -   [简单员额](https://npmcn.com/package/%40foxglove/node-fetch/#readme-simple-post)
    -   [带 JSON 的帖子](https://npmcn.com/package/%40foxglove/node-fetch/#readme-post-with-json)
    -   [有窗体参数的帖子](https://npmcn.com/package/%40foxglove/node-fetch/#readme-post-with-form-parameters)
    -   [处理例外](https://npmcn.com/package/%40foxglove/node-fetch/#readme-handling-exceptions)
    -   [处理客户端和服务器错误](https://npmcn.com/package/%40foxglove/node-fetch/#readme-handling-client-and-server-errors)
    -   [处理饼干](https://npmcn.com/package/%40foxglove/node-fetch/#readme-handling-cookies)
-   [高级使用](https://npmcn.com/package/%40foxglove/node-fetch/#readme-advanced-usage)
    -   [流线](https://npmcn.com/package/%40foxglove/node-fetch/#readme-streams)
    -   [缓冲](https://npmcn.com/package/%40foxglove/node-fetch/#readme-buffer)
    -   [访问信头和其他 Meta 数据](https://npmcn.com/package/%40foxglove/node-fetch/#readme-accessing-headers-and-other-meta-data)
    -   [提取 Set- Cookie 页眉](https://npmcn.com/package/%40foxglove/node-fetch/#readme-extract-set-cookie-header)
    -   [使用文件流发送数据](https://npmcn.com/package/%40foxglove/node-fetch/#readme-post-data-using-a-file-stream)
    -   [带有窗体数据( 检测多部分) 的邮箱](https://npmcn.com/package/%40foxglove/node-fetch/#readme-post-with-form-data-detect-multipart)
    -   [请求取消终止符号](https://npmcn.com/package/%40foxglove/node-fetch/#readme-request-cancellation-with-abortsignal)
-   [API 密码](https://npmcn.com/package/%40foxglove/node-fetch/#readme-api)
    -   [获取( url\[, 选项\])](https://npmcn.com/package/%40foxglove/node-fetch/#readme-fetchurl-options)
    -   [选项](https://npmcn.com/package/%40foxglove/node-fetch/#readme-options)
        -   [默认信头](https://npmcn.com/package/%40foxglove/node-fetch/#readme-default-headers)
        -   [自定义代理](https://npmcn.com/package/%40foxglove/node-fetch/#readme-custom-agent)
        -   [自定义高水母](https://npmcn.com/package/%40foxglove/node-fetch/#readme-custom-highwatermark)
        -   [不安全的 HTTP 解析器](https://npmcn.com/package/%40foxglove/node-fetch/#readme-insecure-http-parser)
    -   [类: 请求](https://npmcn.com/package/%40foxglove/node-fetch/#readme-class-request)
        -   [新请求(输入\[,选项\])](https://npmcn.com/package/%40foxglove/node-fetch/#readme-new-requestinput-options)
    -   [类别:回应](https://npmcn.com/package/%40foxglove/node-fetch/#readme-class-response)
        -   [新的反应(\[机构\]\[,选项)\])](https://npmcn.com/package/%40foxglove/node-fetch/#readme-new-responsebody-options)
        -   [答复](https://npmcn.com/package/%40foxglove/node-fetch/#readme-responseok)
        -   [回复](https://npmcn.com/package/%40foxglove/node-fetch/#readme-responseredirected)
        -   [响应。类型](https://npmcn.com/package/%40foxglove/node-fetch/#readme-responsetype)
    -   [类: 页眉](https://npmcn.com/package/%40foxglove/node-fetch/#readme-class-headers)
        -   [新标题( \[init\] )](https://npmcn.com/package/%40foxglove/node-fetch/#readme-new-headersinit)
    -   [接口:正文](https://npmcn.com/package/%40foxglove/node-fetch/#readme-interface-body)
        -   [躯体](https://npmcn.com/package/%40foxglove/node-fetch/#readme-bodybody)
        -   [躯体](https://npmcn.com/package/%40foxglove/node-fetch/#readme-bodybodyused)
        -   [车体. 阵列缓冲 ()](https://npmcn.com/package/%40foxglove/node-fetch/#readme-bodyarraybuffer)
        -   [机构. blob( )](https://npmcn.com/package/%40foxglove/node-fetch/#readme-bodyblob)
        -   [机构.json()](https://npmcn.com/package/%40foxglove/node-fetch/#readme-bodyjson)
        -   [文本( )](https://npmcn.com/package/%40foxglove/node-fetch/#readme-bodytext)
        -   [弹出器( )](https://npmcn.com/package/%40foxglove/node-fetch/#readme-bodybuffer)
    -   [类: 获取错误](https://npmcn.com/package/%40foxglove/node-fetch/#readme-class-fetcherror)
    -   [类: 中止错误](https://npmcn.com/package/%40foxglove/node-fetch/#readme-class-aborterror)
-   [类型脚本](https://npmcn.com/package/%40foxglove/node-fetch/#readme-typescript)
-   [致谢](https://npmcn.com/package/%40foxglove/node-fetch/#readme-acknowledgement)
-   [团队](https://npmcn.com/package/%40foxglove/node-fetch/#readme-team) - 说吧 [前一个](https://npmcn.com/package/%40foxglove/node-fetch/#readme-former)
-   [许可证](https://npmcn.com/package/%40foxglove/node-fetch/#readme-license)

## 动机

而不是执行 `XMLHttpRequest` 在节点.js中运行特定浏览器 [获取多填充](https://github.com/github/fetch),为什么不从本地去 `http` 改为 `fetch` API直接吗? 因此, `node-fetch`,最小代码 `window.fetch` 在 Node.js 运行时间上兼容 API.

见杰森·米勒的 [同位素不匹配](https://www.npmjs.com/package/isomorphic-unfetch) 或者莱昂纳多·克萨达的 [横切](https://github.com/lquixada/cross-fetch) 同位素用途(出口) `node-fetch` 用于服务器侧, `whatwg-fetch` 客户端).

## 特征

-   保持与 `window.fetch` API (英语).
-   跟踪时自觉权衡 [WhatWG 获取光谱](https://fetch.spec.whatwg.org/) 财务报告和审定财务报表 [流谱](https://streams.spec.whatwg.org/) 实施细节,记录已知差异.
-   使用本地承诺和同步函数 .
-   在请求和响应时使用本地的节点流来表示身体.
-   正确解码内容编码(gzip/deflate/brotli),并转换字符串输出(例如) `res.text()` 财务报告和审定财务报表 `res.json()`)自动到UTF-8.
-   有用的扩展,如重定向限制,响应大小限制, [明显错误](https://github.com/node-fetch/node-fetch/blob/master/docs/ERROR-HANDLING.md) 解决麻烦.

## 客户端获取的差异

-   参见已知差异 :
    -   [至v3.x时](https://npmcn.com/package/%40foxglove/node-fetch/docs/v3-LIMITS.md)
    -   [截止 v2.x](https://npmcn.com/package/%40foxglove/node-fetch/docs/v2-LIMITS.md)
-   如果你碰巧使用一个缺失的特性 `window.fetch` 提供,可以随意打开一个问题.
-   拉请求也欢迎!

## 安装

目前稳定的释放量`3.x`(中文(简体) )

```sh
npm install node-fetch
```

## 装入和配置模块

```js
// CommonJS
const fetch = require('node-fetch');

// ES Module
import fetch from 'node-fetch';
```

如果您要在节点中补齐全局对象 :

```js
const fetch = require('node-fetch');

if (!globalThis.fetch) {
    globalThis.fetch = fetch;
}
```

对于早于12年的节点版本,请使用此工具 `globalThis` [多边填充](https://mathiasbynens.be/notes/globalthis)。 。 。 .

## 升级

使用旧版本的节点? 请检查以下文件 :

-   [2.x至3.x升级指南](https://npmcn.com/package/%40foxglove/node-fetch/docs/v3-UPGRADE-GUIDE.md)
-   [1.x至 2.x 升级指南](https://npmcn.com/package/%40foxglove/node-fetch/docs/v2-UPGRADE-GUIDE.md)
-   [更改日志](https://npmcn.com/package/%40foxglove/node-fetch/docs/CHANGELOG.md)

## 常见用途

注:以下文件为最新资料: `3.x` 请检查date=中的日期值 (帮助) [升级](https://npmcn.com/package/%40foxglove/node-fetch/#readme-upgrading)。 。 。 .

### 纯文本或 HTML

```js
const fetch = require('node-fetch');

const response = await fetch('https://github.com/');
const body = await response.text();

console.log(body);
```

### 贾森

```js
const fetch = require('node-fetch');

const response = await fetch('https://api.github.com/users/github');
const data = await response.json();

console.log(data);
```

### 简单员额

```js
const fetch = require('node-fetch');

const response = await fetch('https://httpbin.org/post', {method: 'POST', body: 'a=1'});
const data = await response.json();

console.log(data);
```

### 带 JSON 的帖子

```js
const fetch = require('node-fetch');

const body = {a: 1};

const response = await fetch('https://httpbin.org/post', {
    method: 'post',
    body: JSON.stringify(body),
    headers: {'Content-Type': 'application/json'}
});
const data = await response.json();

console.log(data);
```

### 有窗体参数的帖子

`URLSearchParams` 在 Node.js 中的全局对象上可获取,截至v10.0.0。 见 [正式文件](https://nodejs.org/api/url.html#url_class_urlsearchparams) 对于更多的使用方法.

注: `Content-Type` 标题只自动设定为 `x-www-form-urlencoded` 当一个实例 `URLSearchParams` 规定如下:

```js
const fetch = require('node-fetch');

const params = new URLSearchParams();
params.append('a', 1);

const response = await fetch('https://httpbin.org/post', {method: 'POST', body: params});
const data = await response.json();

console.log(data);
```

### 处理例外

注:3xxx-5xx的答复是: _没有_ 例外情况,应在 `then()`,参见下一节.

将获取函数包成一个 `try/catch` 块会赶上 _全部_ 例外,例如来自节点核心库的错误,例如网络错误,以及操作错误,这些都是FeferError的例子。 见 [错误处理文档](https://github.com/node-fetch/node-fetch/blob/master/docs/ERROR-HANDLING.md) 更多细节.

```js
const fetch = require('node-fetch');

try {
    await fetch('https://domain.invalid/');
} catch (error) {
    console.log(error);
}
```

### 处理客户端和服务器错误

常见的是创建帮助器功能来检查响应是否包含没有客户端(4xx)或服务器(5xx)错误响应:

```js
const fetch = require('node-fetch');

class HTTPResponseError extends Error {
    constructor(response, ...args) {
        this.response = response;
        super(`HTTP Error Response: ${response.status} ${response.statusText}`, ...args);
    }
}

const checkStatus = response => {
    if (response.ok) {
        // response.status >= 200 && response.status < 300
        return response;
    } else {
        throw new HTTPResponseError(response);
    }
}

const response = await fetch('https://httpbin.org/status/400');

try {
    checkStatus(response);
} catch (error) {
    console.error(error);

    const errorBody = await error.response.text();
    console.error(`Error body: ${errorBody}`);
}
```

### 处理饼干

饼干不是默认保存的. 然而,饼干可以通过操纵请求和响应头来取出并传递. 见 [提取 Set- Cookie 页眉](https://npmcn.com/package/%40foxglove/node-fetch/#readme-extract-set-cookie-header) 详细情况.

## 高级使用

### 流线

"Node.js way"是在可能的情况下使用溪流. 你会吹管子 `res.body` 到另一个溪流。 此示例使用 [流. 管线](https://nodejs.org/api/stream.html#stream_stream_pipeline_streams_callback) 以附加流出错处理器,并等待下载完成.

```js
const {createWriteStream} = require('fs');
const {pipeline} = require('stream');
const {promisify} = require('util');
const fetch = require('node-fetch');

const streamPipeline = promisify(pipeline);

const response = await fetch('https://assets-cdn.github.com/images/modules/logos_page/Octocat.png');

if (!response.ok) throw new Error(`unexpected response ${response.statusText}`);

await streamPipeline(response.body, createWriteStream('./octocat.png'));
```

在Node.js 14中,您也可以使用同步指示器读取 `body`不过,要小心抓住 错误——一个响应运行的时间越长,就越可能遇到错误.

```js
const fetch = require('node-fetch');

const response = await fetch('https://httpbin.org/stream/3');

try {
    for await (const chunk of response.body) {
        console.dir(JSON.parse(chunk.toString()));
    }
} catch (err) {
    console.error(err.stack);
}
```

在Node.js 12中,您也可以使用同步延时器读取 `body`; 然而, 串行者与溪流 直到节点14才成熟,所以你需要做一些额外工作来确保你处理出错 直接从溪来 等待它的反应 完全关闭.

```js
const fetch = require('node-fetch');

const read = async body => {
    let error;
    body.on('error', err => {
        error = err;
    });

    for await (const chunk of body) {
        console.dir(JSON.parse(chunk.toString()));
    }

    return new Promise((resolve, reject) => {
        body.on('close', () => {
            error ? reject(error) : resolve();
        });
    });
};

try {
    const response = await fetch('https://httpbin.org/stream/3');
    await read(response.body);
} catch (err) {
    console.error(err.stack);
}
```

### 缓冲

如果您喜欢全部缓存二进制数据,请使用缓冲 (). (注:缓冲()是一种 `node-fetch` 只有API)

```js
const fetch = require('node-fetch');
const fileType = require('file-type');

const response = await fetch('https://octodex.github.com/images/Fintechtocat.png');
const buffer = await response.buffer();
const type = await fileType.fromBuffer(buffer)

console.log(type);
```

### 访问信头和其他 Meta 数据

```js
const fetch = require('node-fetch');

const response = await fetch('https://github.com/');

console.log(response.ok);
console.log(response.status);
console.log(response.statusText);
console.log(response.headers.raw());
console.log(response.headers.get('content-type'));
```

### 提取 Set- Cookie 页眉

与浏览器不同, 您可以访问原始 `Set-Cookie` 手动使用页眉 `Headers.raw()`。这是 `node-fetch` 仅限API.

```js
const fetch = require('node-fetch');

const response = await fetch('https://example.com');

// Returns an array of values, instead of a string of comma-separated values
console.log(response.headers.raw()['set-cookie']);
```

### 使用文件流发送数据

```js
const {createReadStream} = require('fs');
const fetch = require('node-fetch');

const stream = createReadStream('input.txt');

const response = await fetch('https://httpbin.org/post', {method: 'POST', body: stream});
const data = await response.json();

console.log(data)
```

### 带有窗体数据( 检测多部分) 的邮箱

```js
const fetch = require('node-fetch');
const FormData = require('form-data');

const form = new FormData();
form.append('a', 1);

const response = await fetch('https://httpbin.org/post', {method: 'POST', body: form});
const data = await response.json();

console.log(data)

// OR, using custom headers
// NOTE: getHeaders() is non-standard API

const options = {
    method: 'POST',
    body: form,
    headers: form.getHeaders()
};

const response = await fetch('https://httpbin.org/post', options);
const data = await response.json();

console.log(data)
```

节点比对还支持符合光谱的FormData执行,例如 [窗体数据](https://github.com/form-data/form-data) 财务报告和审定财务报表 [窗体数据节点](https://github.com/octet-stream/form-data)数字 :

```js
const fetch = require('node-fetch');
const FormData = require('formdata-node');

const form = new FormData();
form.set('greeting', 'Hello, world!');

const response = await fetch('https://httpbin.org/post', {method: 'POST', body: form});
const data = await response.json();

console.log(data);
```

### 请求取消终止符号

您可以取消请求 `AbortController`建议的执行是: [`abort-controller`](https://www.npmjs.com/package/abort-controller)。 。 。 .

150毫秒后取消请求的一个实例如下:

```js
const fetch = require('node-fetch');
const AbortController = require('abort-controller');

const controller = new AbortController();
const timeout = setTimeout(() => {
    controller.abort();
}, 150);

try {
    const response = await fetch('https://example.com', {signal: controller.signal});
    const data = await response.json();
} catch (error) {
    if (error instanceof fetch.AbortError) {
        console.log('request was aborted');
    }
} finally {
    clearTimeout(timeout);
}
```

见 [测试案例](https://github.com/node-fetch/node-fetch/blob/master/test/) 需要更多的实例.

## API 密码

### 获取( url\[, 选项\])

-   `url` 用于获取的 URL 的字符串
-   `options` [选项](https://npmcn.com/package/%40foxglove/node-fetch/#readme-fetch-options) 用于 HTTP( S) 请求
-   回返情况: `Promise<[Response](https://npmcn.com/package/%40foxglove/node-fetch/#readme-class-response)>`

执行 HTTP( S) 获取 .

`url` 应该是一个绝对的url,例如 `https://example.com/`。路径相对的 URL (`/file/under/root`)或协议相对的 URL(`//can-be-http-or-https.com/`)将导致被拒绝 `Promise`。 。 。 .

### 选项

默认值在每个选项密钥后显示 .

```js
{
    // These properties are part of the Fetch Standard
    method: 'GET',
    headers: {},            // Request headers. format is the identical to that accepted by the Headers constructor (see below)
    body: null,             // Request body. can be null, a string, a Buffer, a Blob, or a Node.js Readable stream
    redirect: 'follow',     // Set to `manual` to extract redirect headers, `error` to reject redirect
    signal: null,           // Pass an instance of AbortSignal to optionally abort requests

    // The following properties are node-fetch extensions
    follow: 20,             // maximum redirect count. 0 to not follow redirect
    compress: true,         // support gzip/deflate content encoding. false to disable
    size: 0,                // maximum response body size in bytes. 0 to disable
    agent: null,            // http(s).Agent instance or function that returns an instance (see below)
    highWaterMark: 16384,   // the maximum number of bytes to store in the internal buffer before ceasing to read from the underlying resource.
    insecureHTTPParser: false	// Use an insecure HTTP parser that accepts invalid HTTP headers when `true`.
}
```

#### 默认信头

如果没有设置值,则将自动发送下列请求头:

| 页眉 | 数值 |
| --- | --- |
| `Accept-Encoding` | `gzip,deflate,br` _(当 `options.compress === true`(中文(简体) )_ |
| `Accept` | `*/*` |
| `Connection` | `close` _(无时) `options.agent` 已存在)_ |
| `Content-Length` | _(如有可能,自动计算)_ |
| `Transfer-Encoding` | `chunked` _(当 `req.body` 是一个溪流)_ |
| `User-Agent` | `node-fetch` |

注:何时 `body` 是一个 `Stream`, (中文(简体) ), `Content-Length` 未自动设置.

#### 自定义代理

这个 `agent` 选项允许您指定不属于“获取”范围的联网相关选项,包括但不限于以下选项:

-   支持自签名证书
-   只使用 IPv4 或 IPv6
-   自定义 DNS 查询

见 [`http.Agent`](https://nodejs.org/api/http.html#http_new_agent_options) 更多信息.

此外 `agent` 选项接受返回的函数 `http`(s) 减少`.Agent` 实例为当前 [網址](https://nodejs.org/api/url.html),这在跨 HTTP 和 HTTPS 协议的重定向链中有用.

```js
const http = require('http');
const https = require('https');

const httpAgent = new http.Agent({
    keepAlive: true
});
const httpsAgent = new https.Agent({
    keepAlive: true
});

const options = {
    agent: function(_parsedURL) {
        if (_parsedURL.protocol == 'http:') {
            return httpAgent;
        } else {
            return httpsAgent;
        }
    }
};
```

#### 自定义高水母

节点上流出的内部缓冲器尺寸较小(16kB, aka) `highWaterMark`)来自客户端浏览器(>1MB,浏览器之间不一致). 因此,当你写一个异形的应用程序和使用 `res.clone()`,它会在节点中与大响应相挂起.

建议解决这一问题的方法是同时解决克隆反应:

```js
const fetch = require('node-fetch');

const response = await fetch('https://example.com');
const r1 = await response.clone();

const results = await Promise.all([response.json(), r1.text()]);

console.log(results[0]);
console.log(results[1]);
```

如果你出于某种原因 不喜欢上面的解决方案,因为 `3.x` 您可以修改 `highWaterMark` 选项 :

```js
const fetch = require('node-fetch');

const response = await fetch('https://example.com', {
    // About 1MB
    highWaterMark: 1024 * 1024
});

const result = await res.clone().buffer();
console.dir(result);
```

#### 不安全的 HTTP 解析器

路过 `insecureHTTPParser` 。请求。 见 [`http.request`](https://nodejs.org/api/http.html#http_http_request_url_options_callback) 更多信息.

### 类: 请求

HTTP( S) 请求, 包含关于 URL 、 方法、 标题和 机构 的信息 。 此类执行 [体质](https://npmcn.com/package/%40foxglove/node-fetch/#readme-iface-body) 接口.

由于节点(Node.js)的性质,目前尚未执行以下属性:

-   `type`
-   `destination`
-   `referrer`
-   `referrerPolicy`
-   `mode`
-   `credentials`
-   `cache`
-   `integrity`
-   `keepalive`

提供了以下节点扩展属性:

-   `follow`
-   `compress`
-   `counter`
-   `agent`
-   `highWaterMark`

见 [选项](https://npmcn.com/package/%40foxglove/node-fetch/#readme-fetch-options) 用于这些扩展的确切含义.

#### 新请求(输入\[,选项\])

_(符合规格)_

-   `input` 代表 URL 的字符串,或者另一个 `Request` (将被克隆)
-   `options` HTTP( S) 请求的\[可选 \[# fetch- options\]

构造一个新的 `Request` 对象。 构造器与 [浏览器](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request)。 。 。 .

在大多数情况下,直接 `fetch(url, options)` 简单于创建 `Request` 对象.

### 类别:回应

HTTP( S) 响应 。 此类执行 [体质](https://npmcn.com/package/%40foxglove/node-fetch/#readme-iface-body) 接口.

此时节点不执行以下属性 :

-   `trailer`

#### 新的反应(\[机构\]\[,选项)\])

_(符合规格)_

-   `body` A 类 `String` 或者说 [`Readable` 流线](https://nodejs.org/api/stream.html#stream_readable_streams)
-   `options` A 类 [`ResponseInit`](https://fetch.spec.whatwg.org/#responseinit) 选项词典

构造一个新的 `Response` 对象。 构造器与 [浏览器](https://developer.mozilla.org/en-US/docs/Web/API/Response/Response)。 。 。 .

由于Node.js不实施服务工人(为服务工人设计了这一类),人们很少需要建造一个 `Response` 直接说.

#### 答复

_(符合规格)_

代表请求正常结束的方便财产。 如果答复情况大于或等于200,但小于300,将进行真实评价.

#### 回复

_(符合规格)_

代表请求至少重新定向一次的方便财产。 如果内部重定向计数器大于0.

#### 响应。类型

_(来自 spec 的缩写)_

代表响应类型的方便属性。 节点比对只支持 `'default'` 财务报告和审定财务报表 `'error'` 而不使用 [过滤的响应](https://fetch.spec.whatwg.org/#concept-filtered-response)。 。 。 .

### 类: 页眉

此类允许在一组HTTP头上进行操纵并活化. 《公约》中规定的所有方法 [获取标准](https://fetch.spec.whatwg.org/) 已执行.

#### 新标题( \[init\] )

_(符合规格)_

-   `init` 预填的可选参数 `Headers` 对象

构造新 `Headers` 对象. `init` 也可以这样 `null`页:1 `Headers` 对象、键值映射对象或任何可移动对象.

```js
// Example adapted from https://fetch.spec.whatwg.org/#example-headers-class
const {Headers} = require('node-fetch');

const meta = {
    'Content-Type': 'text/xml',
    'Breaking-Bad': '<3'
};
const headers = new Headers(meta);

// The above is equivalent to
const meta = [['Content-Type', 'text/xml'], ['Breaking-Bad', '<3']];
const headers = new Headers(meta);

// You can in fact use any iterable objects, like a Map or even another Headers
const meta = new Map();
meta.set('Content-Type', 'text/xml');
meta.set('Breaking-Bad', '<3');
const headers = new Headers(meta);
const copyOfHeaders = new Headers(headers);
```

### 接口:正文

`Body` 是一个抽象的界面,与两种方法都适用 `Request` 财务报告和审定财务报表 `Response` 课程.

此时节点尚未实施以下方法: 1

-   `formData()`

#### 躯体

_(来自 spec 的缩写)_

-   节点.js [`Readable` 流线](https://nodejs.org/api/stream.html#stream_readable_streams)

数据封装在 `Body` 对象。 请注意,虽然 [获取标准](https://fetch.spec.whatwg.org/) 要求财产永远是一个WhatWG `ReadableStream`在节点和节点之间 [`Readable` 流线](https://nodejs.org/api/stream.html#stream_readable_streams)。 。 。 .

#### 躯体

_(符合规格)_

-   `Boolean`

如果这具尸体被消耗了,那就意味着一个布尔的财产。 按照规格,一个被消耗的身体不能再被使用.

#### 车体. 阵列缓冲 ()

#### 机构. blob( )

#### 机构.json()

#### 文本( )

_(符合规格)_

-   回返情况: `Promise`

将尸体收起来,并返回一个承诺,以决定其中的一种形式.

#### 弹出器( )

_(节点-牵引扩展)_

-   回返情况: `Promise<Buffer>`

收起尸体,把承诺还给缓冲器.

### 类: 获取错误

_(节点-牵引扩展)_

获取过程中的操作错误 。 见 [错误的修复(MD)](https://github.com/node-fetch/node-fetch/blob/master/docs/ERROR-HANDLING.md) 需要更多信息.

### 类: 中止错误

_(节点-牵引扩展)_

请求因响应 `AbortSignal`是因为 `abort` 活动。 它有一个 `name` 财产 `AbortError`。见 [(原始内容存档于2013-10-10). ERROR-HANDLING.MD](https://github.com/node-fetch/node-fetch/blob/master/docs/ERROR-HANDLING.md) 需要更多信息.

## 类型脚本

**自兹 `3.x` 类型与 `node-fetch`,因此不需要安装任何额外的软件包.**

对于旧版本,请使用来自 [绝对是Tyed](https://github.com/DefinitelyTyped/DefinitelyTyped)数字 :

```sh
npm install --save-dev @types/node-fetch
```

## 致谢

感谢 [gi/牵引](https://github.com/github/fetch) 提供坚实的执行参考.

## 团队

| [![David Frank](https://github.com/bitinn.png?size=100)](https://github.com/bitinn) | [![Jimmy Wärting](https://github.com/jimmywarting.png?size=100)](https://github.com/jimmywarting) | [![Antoni Kepinski](https://github.com/xxczaki.png?size=100)](https://github.com/xxczaki) | [![Richie Bendall](https://github.com/Richienb.png?size=100)](https://github.com/Richienb) | [![Gregor Martynus](https://github.com/gr2m.png?size=100)](https://github.com/gr2m) |
| --- | --- | --- | --- | --- |
| [大卫·弗兰克](https://bitinn.net/) | [吉米・沃丁](https://jimmy.warting.se/) | [安东尼·克平斯基](https://kepinski.me/) | [里奇·本道尔](https://www.richie-bendall.ml/) | [格雷戈·马蒂努斯](https://twitter.com/gr2m) |

###### 前一个

-   [顾提摩西](https://github.com/timothygu)
-   [贾里德·康特罗维茨](https://github.com/jkantr)

## 许可证

[麻省理工学院](https://npmcn.com/package/%40foxglove/node-fetch/LICENSE.md)

## 常见问题

### @foxglove/node-fetch 是什么？

将 API 带入节点的轻量级模块

### 如何安装 @foxglove/node-fetch？

在项目目录运行 npm install @foxglove/node-fetch，或使用 pnpm add / yarn add / bun add。

### @foxglove/node-fetch 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @foxglove/node-fetch 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @foxglove/node-fetch 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js ^10\.17 \|\| \>=12\.3。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @foxglove/node-fetch 可以商用吗？

@foxglove/node-fetch 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @foxglove/node-fetch 的下载量有多少？

根据 npm 官方下载统计，@foxglove/node-fetch 在 2026/10/16 – 2026/11/14 这 30 天内被下载 9,916 次，日均约 331 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @foxglove/node-fetch 还在维护吗？

最新版本 3\.1\.0 发布于 2021/07/15（5 年前）；至今共发布 1 个版本，其中过去 12 个月发布了 0 个；首次发布于 2021/07/15。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

