Elysia:Bun-first Web 框架
Bun 是一个快速轻量级的 JavaScript 运行时,旨在成为 Node.js 的替代方案。它支持热重载、文件系统 API 和原生模块等功能。但是,如果您想使用 Bun 构建 Web 应用程序怎么办?Elysia 正是您所需要的。
Elysia 是 Bun 的 Web 框架,其设计注重性能、简洁且灵活。它拥有类似 Express 的语法、类型推断、中间件、文件上传以及用于各种功能的插件,例如 JWT 身份验证、tRPC 等。根据其文档,它还声称是最快的 Bun Web 框架之一。
在本文中,我们将探讨Elysia的一些主要功能,并了解如何使用它来创建一个简单的 Web 应用程序。
入门
要开始使用 Elysia,你需要在系统上安装 Bun。你可以使用 npm 安装它:
npm install -g bun
然后,您可以使用 bun create 命令使用 Elysia 模板生成一个新项目:
bun create elysia myapp
cd myapp
要在开发模式下运行 Web 应用程序,可以使用 bun run dev 命令:
bun dev
导航到 localhost:3000 应该会向您显示“Hello Elysia”。
特征
- 性能——静态代码分析以生成优化代码
- 统一类型 - 共享 DTO 运行时和编译时验证
- 端到端类型安全——同步客户端和服务器的数据
- TypeScript - 广泛的类型系统,提供完整的 TypeScript 体验
- JSX 模板引擎 - 前端开发人员熟悉的体验
- 符合人体工程学的设计 - 用于构建服务器的简单且熟悉的 API
只是功能
Elysia 的核心原则之一是一切皆函数。这意味着您可以使用纯 JavaScript 函数来定义路由、中间件、插件,甚至 Elysia 实例本身。这使得 Elysia 非常易于使用、测试和编写。
例如,要定义一个返回文本响应的简单 GET 路由,您可以编写:
import { Elysia } from 'elysia'
new Elysia()
.get('/', () => 'Hello World')
.get('/json', () => ({
hello: 'world'
}))
.listen(3000)
类型安全
更进一步,Elysia 提供了 Elysia.t,这是一个模式构建器,用于在运行时和编译时验证类型和值,为您的数据类型创建单一真实来源。
import { Elysia, t } from 'elysia'
new Elysia()
.get('/id/:id', ({ params: { id } }) => id, {
params: t.Object({
id: t.Numeric()
})
})
.listen(3000)
标准
Elysia 默认采用许多标准,例如 OpenAPI 和 WinterCG 合规性,允许您与大多数行业标准工具集成,或者至少可以轻松地与您熟悉的工具集成。
例如,由于 Elysia 默认采用 OpenAPI,因此使用 Swagger 生成文档就像添加一行代码一样简单:
import { Elysia, t } from 'elysia'
import { swagger } from '@elysiajs/swagger'
new Elysia()
.use(swagger())
.get('/id/:id', ({ params: { id } }) => id, {
params: t.Object({
id: t.Numeric()
})
})
.listen(3000)
插件
Elysia 还支持插件,这些插件可以扩展 Elysia 实例、请求对象、回复对象或路由方法的功能。例如,JWT 插件增加了在 Elysia 处理程序中使用 JWT 的支持。
安装方式:
bun add @elysiajs/jwt
然后使用它:
import { Elysia } from 'elysia'
import { jwt } from '@elysiajs/jwt'
const app = new Elysia()
.use(
jwt({
name: 'jwt',
secret: 'Fischl von Luftschloss Narfidort'
})
)
.get('/sign/:name', async ({ jwt, cookie: { auth }, params }) => {
auth.set({
value: await jwt.sign(params),
httpOnly: true,
maxAge: 7 * 86400,
path: '/profile',
})
return `Sign in as ${auth.value}`
})
.get('/profile', async ({ jwt, set, cookie: { auth } }) => {
const profile = await jwt.verify(auth.value)
if (!profile) {
set.status = 401
return 'Unauthorized'
}
return `Hello ${profile.name}`
})
.listen(8080)
结论
在本文中,我们了解了如何使用 Elysia(一个基于 Bun 的 Web 框架)创建一个简单的 Web 应用程序。我们探索了 Elysia 的一些主要功能,例如定义路由、使用中间件以及使用插件。Elysia 是一个快速、简单且灵活的 Web 框架,充分利用了 Bun 的功能和 API。
希望这篇文章对你有帮助。如果你有任何反馈或疑问,请告诉我。😊
文章来源:https://dev.to/oggy107/elysia-a-bun-first-web-framework-1kf3