# @fastly/http-compute-js 中文文档

规范地址：https://npmcn.com/package/%40fastly/http-compute-js/

版本：2\.0\.0
npm 元数据更新时间：2026-10-27T05:44:46.661Z
中文译文更新时间：2026-11-14T11:27:25.630Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40fastly/http-compute-js
原文对照：https://npmcn.com/package/%40fastly/http-compute-js/?lang=original
项目主页：https://github.com/fastly/http-compute-js#readme
源码仓库：https://github.com/fastly/http-compute-js

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

- 包体积（解压后）：111 kB，26 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：6 个
- peer 依赖：@fastly/js-compute ^2\.0\.0 \|\| ^3\.0\.0
- 首次发布：2022-08-06T03:23:56.959Z
- 最新版本发布：2026-02-12T07:51:54.842Z
- 近 30 天下载量：7098（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：35（近 12 个月 1 个）

## 中文简介

快速计算 JavaScript 的节点.js 兼容请求和响应对象

## 安装

```sh
npm install @fastly/http-compute-js
```

也可以使用：`pnpm add @fastly/http-compute-js`、`yarn add @fastly/http-compute-js`、`bun add @fastly/http-compute-js`

## README

# @fastly/http-compute-js (英语)

一个旨在提供与节点相容的请求和响应对象的库.

计算提供 [请求和答复反对](https://developer.fastly.com/learning/compute/javascript/#composing-requests-and-responses) b. 以现代模式为基础的 [获取标准](https://fetch.spec.whatwg.org/) 而不是现在 `req` 财务报告和审定财务报表 `res` 传统上在Node.js程序中看到的物体。 如果你更熟悉使用节点.js请求和响应对象,或者有一些与它们合作的库,这个库旨在让你这样做.

## 使用量

对您的计算 JavaScript 项目( 您可以使用它创建) `npm init @fastly/create` 并计算 Java 脚本 [空启动套件](https://github.com/fastly/compute-starter-kit-javascript-empty),添加 `@fastly/http-compute-js` 软件包作为依赖.

```
npm install @fastly/http-compute-js
```

在你的节目中:

```javascript
import http from '@fastly/http-compute-js';

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({
    data: 'Hello World!'
  }));
});

server.listen();
```

`req` 财务报告和审定财务报表 `res` 的执行情况 [`IncomingMessage`](https://nodejs.org/api/http.html#class-httpincomingmessage) 财务报告和审定财务报表 [`ServerResponse`](https://nodejs.org/api/http.html#class-httpserverresponse),并可以用作节点.js程序.

`req` 是一个 `IncomingMessage` 对象 `Readable` 接口已连接到计算请求的正文。 因此,你可以用标准读取 `on('data')`编号 :`on('end')` 或利用图书馆,例如: [`parse-body`](https://www.npmjs.com/package/parse-body)。也可以使用标准接口读取标题和其他信息.

`res` 是一个 `ServerResponse` 对象 `Writable` 接口连接到一个内膜缓冲器。 通常使用 `res.write()` 编号 : `res.end()` 或用管接住它 `res.pipe()`。也可以使用标准接口设置标题和状态代码.

### 注:已知问题

-   该图书馆的目的是提供实用的相容性. 请理解,由于平台差异,一些功能无法实现与Node.js100%相容.
-   库使用 npm 包, 例如 [流眉检查](https://www.npmjs.com/package/stream-browserify), (中文(简体) ), [缓冲](https://www.npmjs.com/package/buffer), (中文(简体) ), [事件](https://www.npmjs.com/package/events),以及 [进程](https://www.npmjs.com/package/process) 用于模拟低等对象的节点.js行为.
-   消费的其他图书馆 `IncomingMessage` 财务报告和审定财务报表 `ServerResponse` 可能与计算兼容,也可能不兼容。 如果应用多填充,一些可能有用 [模块捆绑时](https://developer.fastly.com/learning/compute/javascript/#module-bundling)。 。 。 .
-   HTTP 版本目前一直报告为 `1.1`。 。 。 .
-   和Node.js不同的是 `socket` 这些对象的属性总是 `null`,无法指定.
-   一些功能没有( 尚未) 支持 : `http.Agent`, (中文(简体) ), `http.ClientRequest`, (中文(简体) ), `http.get()`, (中文(简体) ), `http.request()`举出几个例子.
-   传输编码:块当前不工作,已禁用.
-   目前 `ServerResponse` 写入流必须在 `Response` 对象生成.

### 示例

以下是从请求中读取URL,方法,头和正文,并写出回复的示例.

```javascript
import http from '@fastly/http-compute-js';

const server = http.createServer(async (req, res) => {
  // Get URL, method, headers, and body from req
  const url = req.url;
  const method = req.method;
  const headers = {};
  for (let [key, value] of Object.entries(req.headers)) {
    if(!Array.isArray(value)) {
      value = [String(value)];
    }
    headers[key] = value.join(', ');
  }
  let body = null;
  if (method !== 'GET' && method !== 'HEAD') {
    // Reading data out of a stream.Readable 
    body = await new Promise(resolve => {
      const data = [];
      req.on('data', (chunk) => {
        data.push(chunk);
      });
      req.on('end', () => {
        resolve(data.join(''));
      });
    });
  }

  // Write output to res
  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({
    url,
    method,
    headers,
    body,
  }));
});

server.listen();
```

## 这个 `server` 对象

`server` 是一个实例 `HttpServer`,以 [`http.Server`](https://nodejs.org/api/http.html#class-httpserver)。使用 `createServer()` 函数,通常在请求处理器中通过。 这个 `server` 开始聆听 `fetch` 事件 `listen()` 函数调用.

`createServer([onRequest])`

-   证明a `HttpServer` 例如,在请求的听众中可以选择通过.
-   参数:
    -   `onRequest` - (可选)提供这个相当于呼叫 `server.on('request', onRequest)` 即时反应后.
-   回返:a `HttpServer` 举个例子.

`HttpServer` 班级成员:

-   `listen([port][,onListening])`
    -   启动 `server` 监听 `fetch` 事件.
    -   参数:
        -   `port` - (可选)端口号。 此参数纯粹是为了 API 与 Node 兼容 `server.listen()`,被计算忽略.
        -   `onListening` - (可选)提供这个相当于呼叫 `server.on('listening', onListening)` 在使用这种方法之前.
-   事件: `'listening'`
    -   释放时 `fetch` 调用后已建立事件处理器 `server.listen()`。 。 。 .
-   事件: `'request'`
    -   每次都有请求.
    -   参数:
        -   `request` - 说吧 `http.IncomingMessage`
        -   `response` - 说吧 `http.ServerResponse`

## 手动即时 `req` 财务报告和审定财务报表 `res`

有时,您可能只需要在应用程序的某些部分使用与Node.js兼容的请求和响应对象. 或者,您可能正在使用一个现有的应用程序或软件包(例如"中件")来与这些对象交互.

`@fastly/http-compute-js` 提供工具功能,帮助您在其中前后 `Request` 财务报告和审定财务报表 `Response` 用于计算的对象及其相容的节点.

`toReqRes(request)`

-   从计算提供的转换 `Request` 对象为一对与节点相兼容的请求和响应对象.
-   参数:
    -   `request` - 一个 [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) 对象。 你会 通常从 `request` 财产的财产 `event` 您收到的对象 `fetch` 事件 处理者.
-   返回:具有下列属性的对象.
    -   `req` - 一个 [`http.IncomingMessage`](https://nodejs.org/api/http.html#class-httpincomingmessage) 对象 `Readable` 接口已连接到 `Request` 对象的 `body`。注:这是一个错误 若为 `Request`是因为 `body` 已经使用.
    -   `res` - 一个 [`http.ServerResponse`](https://nodejs.org/api/http.html#class-httpserverresponse) 对象 `Writable` 接口已连接到内存缓冲器.

`toComputeResponse(res)`

-   创建新 `Response` 对象从 `res` 对象上,基于状态代码、标题和已写入的正文。 这个 `Response` 对象通常用作计算结果的返回值 `fetch` 处理者.
-   参数:
    -   `res` - 一个 `http.ServerResponse` 对象创建于 `toReqRes()`。 。 。 .
-   返回:承诺 [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) 对象.
-   注: 此函数返回 a `Promise` 决心 `Response` 一经 `res` 对象释放 [`'finish'`](https://nodejs.org/api/http.html#event-finish) 事件,通常发生在您调用时 [`res.end()`](https://nodejs.org/api/http.html#responseenddata-encoding-callback)。如果您的应用程序从未发出输出结束的信号,那么这个承诺将永远也不会解决,您的应用程序将可能过期.
-   如果发生错误,承诺将以此错误拒绝.

### 示例

以下是一个实例,显示在使用 JavaScript 编写的计算程序中使用手动即时函数 `fetch` 事件听众。 与节点相兼容 `req` 财务报告和审定财务报表 `res` 对象由 `event.request`。在撰写一些输出后, a `Response` 对象是从 `res` 对象,然后从事件听众返回.

```javascript
/// <reference types='@fastly/js-compute' />
import { toReqRes, toComputeResponse } from '@fastly/http-compute-js';

addEventListener('fetch', (event) => event.respondWith(handleRequest(event)));
async function handleRequest(event) {
  // Create Node.js-compatible req and res from event.request
  const { req, res } = toReqRes(event.request);

  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({
    data: 'Hello World!'
  }));

  // Create a Compute-at-Edge Response object based on res, and return it
  return await toComputeResponse(res);
}
```

## 问题

如果你遇到任何与安全无关的错误或意外行为,请 [提交问题](https://github.com/fastly/http-compute-js/issues/new?labels=bug) 使用错误报告模板.

### 安全问题

请看我们的 [警卫](https://npmcn.com/package/%40fastly/http-compute-js/SECURITY.md) 指导如何报告与安全有关的问题.

## 许可证

[麻省理工学院](https://npmcn.com/package/%40fastly/http-compute-js/LICENSE)。 。 。 .

为了让这个库在不需要直接依赖Node.js本身的情况下运行,这个库中的一些代码被从Node.js修改/复制. 这些部分是版权快活公司和其他节点js贡献者.

详情见LICENSE文件.

## 常见问题

### @fastly/http-compute-js 是什么？

快速计算 JavaScript 的节点\.js 兼容请求和响应对象

### 如何安装 @fastly/http-compute-js？

在项目目录运行 npm install @fastly/http-compute-js，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@fastly/js-compute（^2\.0\.0 \|\| ^3\.0\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @fastly/http-compute-js 支持 TypeScript 吗？

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

### @fastly/http-compute-js 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @fastly/http-compute-js 可以商用吗？

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

### @fastly/http-compute-js 的下载量有多少？

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

### @fastly/http-compute-js 还在维护吗？

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

