Edge Functions 是运行在边缘的轻量级函数,基于 V8 运行时,适用于构建简单 API、访问 KV 存储以及需要超低延迟响应的场景。其运行时与 Cloudflare Workers 类似,而非 Node.js,因此不能使用 Node.js 内置模块或 npm 包。需要注意的是,该 V8 运行时不支持 Response.json(),应使用 new Response(JSON.stringify(data), { headers: { 'Content-Type': 'application/json' } }) 来返回 JSON。
主要能力
编写基本函数时,文件路径决定路由。例如在 edge-functions/api/hello.js 中导出默认函数 onRequest(context),即可通过 GET /api/hello 访问。函数可以处理所有 HTTP 方法,也可以使用特定方法处理器,如 onRequestGet、onRequestPost 等。
EventContext 对象提供 request(标准 Request 对象)、params(动态路由参数)、env(来自 Pages 控制台的环境变量)和 waitUntil(用于延长函数生命周期以执行异步任务)。GEO 信息可通过 context.request.eo 获取,例如 geo.geo.countryName、geo.geo.cityName、geo.geo.latitude 等。
动态路由支持文件名占位符,如 edge-functions/api/users/[id].js 可匹配 /api/users/123 并通过 context.params.id 读取参数;edge-functions/api/[[default]].js 则用于捕获 /api/ 下所有未匹配的路由。
KV 存储仅适用于 Edge Functions。使用前需在 EdgeOne Pages 控制台中启用 KV 存储、创建命名空间并绑定到项目。绑定后的 KV 命名空间是全局变量(名称由控制台绑定时的设定决定),而不是挂在 context.env 上。可通过 my_kv.get('key') 读取,通过 my_kv.put('key', value) 写入。完整的 KV 存储 API 参考和使用指南可参见同目录下的 kv-storage.md。
运行时支持的 Web 标准 API 包括 Fetch API、Cache API、Headers / Request / Response、Streams、Web Crypto、Encoding(TextEncoder、TextDecoder)以及 URL / URLSearchParams。不支持 Node.js 内置模块(如 fs、path、http、Node 的 crypto)、require() 以及 npm 包。
使用方式
通过文件路径定义路由,在 JavaScript 文件中导出 onRequest 或特定 HTTP 方法处理器。函数通过 context 参数获取请求信息、动态参数、环境变量和 GEO 数据。需要 KV 存储时,先在控制台完成命名空间创建与绑定,再以全局变量方式调用。
适用场景
适用于构建轻量级边缘 API、简单的 KV 存储读写、需要超低延迟响应的服务,以及利用 GEO 信息进行地理位置相关处理的场景。
限制
代码包大小限制为 5 MB,请求体限制为 1 MB,每次调用的 CPU 时间限制为 200 ms,仅支持 JavaScript(ES2023+)。不提供 Node.js 内置模块、require() 或 npm 包支持。