@fastly/http-compute-js

中文文档
2.0.0发布于 2026/02/12MITTypeScriptES Module构建来源已验证近 30 天下载 7098

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

中文使用文档
文档目录9 节
  1. 使用量
  2. 注:已知问题
  3. 示例
  4. 这个 server 对象
  5. 手动即时 req 财务报告和审定财务报表 res
  6. 示例
  7. 问题
  8. 安全问题
  9. 许可证

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

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

计算提供 请求和答复反对 b. 以现代模式为基础的 获取标准 而不是现在 req 财务报告和审定财务报表 res 传统上在Node.js程序中看到的物体。 如果你更熟悉使用节点.js请求和响应对象,或者有一些与它们合作的库,这个库旨在让你这样做.

使用量

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

npm install @fastly/http-compute-js

在你的节目中:

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 财务报告和审定财务报表 ServerResponse,并可以用作节点.js程序.

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

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

注:已知问题

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

示例

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

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。使用 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 对象。 你会 通常从 request 财产的财产 event 您收到的对象 fetch 事件 处理者.
  • 返回:具有下列属性的对象.
    • req - 一个 http.IncomingMessage 对象 Readable 接口已连接到 Request 对象的 body。注:这是一个错误 若为 Request是因为 body 已经使用.
    • res - 一个 http.ServerResponse 对象 Writable 接口已连接到内存缓冲器.

toComputeResponse(res)

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

示例

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

/// <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);
}

问题

如果你遇到任何与安全无关的错误或意外行为,请 提交问题 使用错误报告模板.

安全问题

请看我们的 警卫 指导如何报告与安全有关的问题.

许可证

麻省理工学院。 。 。 .

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

详情见LICENSE文件.

版本与发布记录

@fastly/http-compute-js 共发布 35 个版本,首次发布于 2022/08/06;过去 12 个月发布了 1 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.0.0latest2026/02/129 个月前
2.0.0-beta.0beta2025/05/081.5 年前
1.1.52025/01/061.9 年前
1.1.42024/01/252 年前
1.1.32024/01/252 年前
1.1.22023/11/083 年前

关于 @fastly/http-compute-js 的常见问题

@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 和提交记录判断。