用途:Elysia 是 Bun 原生的 Web 框架,用于构建端到端类型安全的服务端应用;当使用 Elysia 或需要了解其路由、插件时适用。资料强调其训练数据可能不可靠,写代码前必须先用 WebFetch 读取实时文档:WebFetch("https://elysiajs.com/llms.txt"),不要假设某个 API 存在,需以最新文档为准。
主要能力:类型从服务端路由定义经 Eden Treaty 流向客户端,无需代码生成、tRPC 或 OpenAPI 代码生成。内置基于 TypeBox 的 schema 校验(t.Object()、t.String() 等)。支持 WebSocket 与带类型消息 schema,支持通过流式响应实现 SSE,支持 @elysiajs/swagger 自动生成 Swagger/OpenAPI,@elysiajs/static 提供静态文件与缓存头,@elysiajs/cors 提供类型化 CORS 配置,@elysiajs/bearer 提取并校验 token,另有 t.File() 与 t.Files() 处理 multipart 文件上传。
使用方式:路由组织建议用 .group(),而非单独创建 Elysia 实例,因为 group 共享父级类型上下文与生命周期钩子;用 new Elysia() 再 .use() 合并可用,但会丢失 Eden Treaty 依赖的类型级连接。Eden Treaty 需要导出 app 类型而非运行时实例,例如服务端 export type App = typeof app,客户端用 treaty<App>('localhost:3000') 后即可 api.users.get() 获得完整类型。生命周期顺序为 onRequest → onParse → onTransform → onBeforeHandle → handler → onAfterHandle → onMapResponse → onAfterResponse;认证守卫应放在 onBeforeHandle 而非 onRequest,因为后者在请求体解析前运行。derive 用于添加请求级值,resolve 用于依赖校验后的值,二者都会注入处理器类型上下文。错误处理用 error() 辅助函数,如 error(404, 'Not found'),而非抛出异常,以保留响应类型安全。schema 同时充当文档,添加 t.String({ description: 'User ID' }) 可改善校验错误与 API 文档。
限制:资料未提供价格、收费、平台支持范围与性能数据;具体 API 会随版本变化,必须以实时文档为准,不要依赖记忆中的模式。