Node.js v17.5.0 发布,核心增加 Fetch API

开发 前端
Node.js 核心引入 fetch API 是一个令人兴奋的功能,目前在 v17.5.0 版本为试验性支持,在今后的 LTS 版本中如果正式支持了,就不需要在依赖第三方 HTTP 请求库了。

Node.js v17.5.0 版本于本周四(2022-02-10)发布,其显著变化为:

  • 试验性支持 fetch() API
  • Stream 新增了 find()、toArray()、forEach()、some()、every() 方法
  • 取消标记 esm json 模块
  • NPM 更新至 8.4.1
  • node-api 添加 node_api_symbol_for() 方法

fetch API 支持

Node.js 核心引入 fetch API 是一个令人兴奋的功能,目前在 v17.5.0 版本为试验性支持,在今后的 LTS 版本中如果正式支持了,就不需要在依赖第三方 HTTP 请求库了。

Fetch API 提供了 WHATWG 标准接口获取资源,这是一个基于 Promise 的 HTTP 客户端,可以用来简化 HTTP 请求,在浏览器环境已支持,浏览器环境的兼容性实现参考 Web/API/fetch,使用方式与浏览器中使用 Fetch API 一致。

Fetch API 主要包含以下四个接口:

  • fetch():该方法是最常用的,用于发送请求。
  • Headers:相当于 response/request 的头信息,可以使你查询到这些头信息,或者针对不同的结果做不同的操作。
  • Request:相当于一个资源请求。
  • Response:相当于请求的响应。

一个简单的使用方式:

const response = await fetch(url);

console.log(response.ok);
console.log(await response.json());

运行时需要加上 --experimental-fetch 标记,例如 node --experimental-fetch test.mjs。

Node.js 中的 fetch() 实现基于 undici,该项目位于 Node.js Github 项目组织下,其中的几位贡献者也是 Node.js 项目的贡献者,致力于为 Node.js 开发快速、可靠且符合规范的 HTTP 客户端,比内置的 HTTP 模块还要快,因为它摒弃了原有的 HTTP 模块,直接构建在 socket 之上,可参见笔者之前写的这篇文章request 已废弃 - 推荐一个超快的 Node.js HTTP Client undici。

Stream 模块

Node.js v17.5.0 Stream 模块增加了 find()、toArray()、forEach()、some()、every() 方法,这一块可 参考官网 API#stream 介绍。

下面以 some() 方法为例,如果有任何大文件就返回 true。

import { Readable } from 'stream';
import { stat } from 'fs/promises';

const anyBigFile = await Readable.from([
'file1',
'file2',
'file3',
]).some(async (fileName) => {
const stats = await stat(fileName);
return stats.size > 1024 * 1024;
}, { concurrency: 2 });

注意:奇数版本不是长期支持版本,Node.js 版本信息参考 Node.js 版本知多少?又该如何选择?。

Reference

https://fusebit.io/blog/node-fetch/

https://mp.weixin.qq.com/s/JXrInHyOk0HAAtA9-CbESw

https://nodejs.org/en/blog/release/v17.5.0/


责任编辑:武晓燕 来源: Nodejs技术栈
相关推荐

2022-03-08 15:13:34

Fetch APINode.js开发者

2024-07-08 08:53:52

2015-06-23 15:27:53

HproseNode.js

2017-06-02 10:00:26

前端Node.js

2021-05-24 11:25:13

Node.js 16V8前端

2021-12-25 22:29:57

Node.js 微任务处理事件循环

2023-01-10 14:11:26

2011-11-08 10:53:02

Node.js

2022-09-04 15:54:10

Node.jsAPI技巧

2012-07-12 10:15:15

Node.js

2022-08-29 18:15:25

Node.js多线程模型

2011-12-05 09:39:57

Node.js

2024-09-25 08:04:58

2013-11-01 09:34:56

Node.js技术

2015-03-10 10:59:18

Node.js开发指南基础介绍

2021-10-26 06:43:36

NodeJavaScript引擎

2011-05-24 15:09:11

NodeJS

2023-04-19 08:31:57

Node.jsLTS版本

2023-04-18 15:18:10

2020-09-28 06:57:39

Node.jsGraphQLAPI
点赞
收藏

51CTO技术栈公众号