@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.IncomingMessageresponse- 说吧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文件.