Elysia:Bun-first Web 框架

2025-06-07

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
Enter fullscreen mode Exit fullscreen mode

然后,您可以使用 bun create 命令使用 Elysia 模板生成一个新项目:

bun create elysia myapp
cd myapp
Enter fullscreen mode Exit fullscreen mode

要在开发模式下运行 Web 应用程序,可以使用 bun run dev 命令:

bun dev
Enter fullscreen mode Exit fullscreen mode

导航到 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)
Enter fullscreen mode Exit fullscreen mode

类型安全

更进一步,Elysia 提供了 Elysia.t,这是一个模式构建器,用于在运行时和编译时验证类型和值,为您的数据类型创建单一真实来源。

import { Elysia, t } from 'elysia'

new Elysia()
    .get('/id/:id', ({ params: { id } }) => id, {
        params: t.Object({
            id: t.Numeric()
        })
    })
    .listen(3000)
Enter fullscreen mode Exit fullscreen mode

标准

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)
Enter fullscreen mode Exit fullscreen mode

插件

Elysia 还支持插件,这些插件可以扩展 Elysia 实例、请求对象、回复对象或路由方法的功能。例如,JWT 插件增加了在 Elysia 处理程序中使用 JWT 的支持。

安装方式:

bun add @elysiajs/jwt
Enter fullscreen mode Exit fullscreen mode

然后使用它:

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)
Enter fullscreen mode Exit fullscreen mode

结论

在本文中,我们了解了如何使用 Elysia(一个基于 Bun 的 Web 框架)创建一个简单的 Web 应用程序。我们探索了 Elysia 的一些主要功能,例如定义路由、使用中间件以及使用插件。Elysia 是一个快速、简单且灵活的 Web 框架,充分利用了 Bun 的功能和 API。

希望这篇文章对你有帮助。如果你有任何反馈或疑问,请告诉我。😊

文章来源:https://dev.to/oggy107/elysia-a-bun-first-web-framework-1kf3
PREV
JavaScript 数组初学者指南(第 2 部分)
NEXT
Git 暂存区:像我五岁一样解释