EdgeOne Makers Recipes 是一组用于 EdgeOne Pages 应用的项目结构模板与脚手架模式参考,适合在创建新项目或需要参考架构时使用。资料以“常见 Recipes(Common Recipes)”的形式,给出多种典型应用的目录结构与关键示例代码。
用途与定位:该资料用于指导 EdgeOne Pages 项目的结构组织,覆盖全栈应用、Edge API、中间件、多语言函数等场景,帮助开发者快速搭建符合平台约定的目录结构。
主要能力与示例结构:
-
Node.js 全栈应用(静态 + API):目录包含 index.html、style.css、script.js 作为前端,cloud-functions/api/users.js 与 cloud-functions/api/users/[id].js 提供 /api/users 的 GET/POST 及 /api/users/:id 的 GET/PUT/DELETE;前端通过 fetch('/api/users') 调用 API。
-
Go(Gin 框架)全栈:cloud-functions/api.go 使用 gin.Default(),注册 /users 的 GET、POST 与 /users/:id 的 GET,并 r.Run(":9000");目录含 go.mod 与 package.json。
-
Python(Flask)全栈:cloud-functions/api/index.py 使用 Flask,提供 /users 的 GET 与 POST;含 cloud-functions/requirements.txt 与 package.json。
-
Python(FastAPI)全栈:cloud-functions/api/index.py 使用 FastAPI,提供 /items 的 GET 与 /items/{item_id} 的 GET;含 cloud-functions/requirements.txt 与 package.json。
-
Go Handler 模式全栈:cloud-functions/api 下按路由组织文件,如 users/list.go 对应 GET /api/users/list、users/[id].go 对应 GET /api/users/:id,hello.go 对应 GET /api/hello;含 go.mod 与 package.json。
-
Edge API + KV 计数器:前置条件是必须先在控制台启用 KV Storage 并绑定命名空间,参见同目录的 kv-storage.md。目录含 edge-functions/api/visit.js,示例中使用 onRequest,通过 my_kv.get('visits') 读取计数、递增后 my_kv.put('visits', count) 写回,并返回 JSON 响应;注释说明 my_kv 为全局变量(名称在控制台绑定命名空间时设置)。设置步骤为:登录 EdgeOne Pages 控制台,进入“KV Storage”点击“Apply Now”,创建命名空间(如 my-kv-store),绑定到项目并将变量名设为 my_kv,部署或运行 edgeone pages dev 测试。
-
Express 全栈:cloud-functions/api/[[default]].js 由 Express 应用处理所有 /api/* 路由。
-
中间件 + API 组合:middleware.js 作为 /api/* 的鉴权守卫;cloud-functions/api/public.js 无需鉴权(matcher 排除),data.js 受中间件保护。
-
多语言 Cloud Functions:同一 cloud-functions/ 目录可使用不同语言,例如 api/users.js(Node.js,/api/users)、api/hello.py(Python,/api/hello)、service.go(Go,/service);含 go.mod、cloud-functions/requirements.txt 与 package.json。说明指出每个文件按扩展名被平台识别语言,并作为独立函数构建与部署,拥有各自运行时。
使用方式:依据项目类型选择对应目录结构模板,创建相应文件并填入示例代码;对于 KV 场景需先完成控制台绑定及命名空间配置,再部署或通过 edgeone pages dev 本地测试。
适用场景:需要快速建立 EdgeOne Pages 项目骨架、查阅全栈/边缘函数/中间件/多语言函数的参考架构时。
限制:资料未说明各模板的兼容性、版本要求、运行时配额或部署限制;未提供收费、价格、平台或效果信息;KV 示例依赖控制台开通与绑定,未绑定无法直接运行。