更新时间:2024-09-03 17:00:37
本示例展示如何利用Edge Cloud Apps 函数实现边缘渲染,并以网络对等分析为例进行演示。用户只需提供一个 ASN(自治系统号),函数就会查询 PeeringDB API,计算该 ASN 与预先配置的目标 ASN(例如苹果公司的 ASN)之间共享的设施和交换点,并将这些信息通过 HTMLRewriter
动态插入到预先准备好的HTML模板中。最终,用户将直接收到一个定制化的、预渲染的响应。
边缘渲染的优势
import { NetworkComparisonHandler, ErrorConditionHandler, AsnHandler } from "./peering-handlers";
import { Network } from "./peering-models-net";
import { apple } from './peering-utils-constants';
async function handleRequest(request) {
const url = new URL(request.url);
const asn = url.searchParams.get('asn'); // 获取用户提供的 ASN
console.log(`asn:${asn}`);
try {
if (asn) {
// 获取苹果公司和用户提供的 ASN 的网络信息
const apNetwork = await new Network(apple['asn']).populate();
const otherNetwork = await new Network(asn).populate();
// 计算两个网络之间共享的设施和交换点
const sharedItems = await apNetwork.compare(otherNetwork);
console.log(`sharedItems: ${sharedItems.length}`);
let response = await fetch(request.url);
// 使用 HTMLRewriter 动态修改 HTML 内容
return await new HTMLRewriter()
.on('#asnField', new AsnHandler(asn)) // 处理 ASN 输入框
.on('#formContainer', new NetworkComparisonHandler({apNetwork, otherNetwork, sharedItems})) // 处理结果展示区域
.transform(response);
} else {
return fetch(request.url);
}
} catch (e) {
console.error(`error:${e}`);
let response = await fetch(request.url);
return await new HTMLRewriter()
.on('#asnField', new AsnHandler(asn))
.on('#formContainer', new ErrorConditionHandler(asn))
.transform(response);
}
}
addEventListener("fetch", event => {
return event.respondWith(handleRequest(event.request));
});