Skip to content
Curved text logo saying 'Elysia JS'

人体工程学框架

具有 TypeScript 端到端的类型安全,统一的类型系统和出色的开发人员体验。由 Bun 提供加速支持。

开始使用
bun create elysia app

了解为什么开发人员喜欢 Elysia

比 Express 快 21 倍

通过 Bun 运行时、静态代码分析和动态代码注入增强。

成为性能最佳的 TypeScript 框架之一。可与 Go 和 Rust 相媲美。

  1. Elysia Bun

    2,454,631 req/s
  2. Swoole PHP

    1,035,418
  3. Gin Go

    676,019
  4. Spring Java

    506,087
  5. FastAPI PyPy

    448,130
  6. Fastify Node

    415,600
  7. Express Node

    113,117
  8. Nest Node

    105,064

以每秒请求次数进行测量。数据来源于官方 TechEmpower 基准测试 第 22 轮(2023-10-17)的 PlainText 结果。

为人类而生

专注于提高生产力 ++

如果你发现自己在为框架编写代码,那就说明框架出了问题。

因此,Elysia 投入了大量时间对设计决策进行实验,以尽可能为每个人设计出最符合人体工程学的方式。

从内置的严格类型验证到统一的类型系统和文档生成,成为使用 TypeScript 构建服务器的理想框架。

typescript
import { 
Elysia
} from 'elysia'
new
Elysia
()
.
get
('/', 'Hello World')
.
get
('/json', {
hello
: 'world'
}) .
get
('/id/:id', ({
params
: {
id
} }) =>
id
)
.
listen
(3000)

仅需要值

不需要额外的方法,仅需返回值即可将数据发回客户端。

无论是普通字符串还是复杂的 JSON 数据,只需返回这个值,Elysia 将会处理其余部分。

typescript
import { 
Elysia
,
t
} from 'elysia'
new
Elysia
()
.
post
(
'/profile', // ↓ hover me ↓ ({
body
}) =>
body
,
{
body
:
t
.
Object
({
username
:
t
.
String
()
}) } ) .
listen
(3000)

类型安全

在 TypeBox 的支持下,Elysia 默认强制执行类型严格验证以确保类型完整性。

Elysia 自动将类型推断为 TypeScript,以创建像静态类型语言一样的统一类型系统。

ts
import { 
Elysia
,
t
} from 'elysia'
import {
swagger
} from '@elysiajs/swagger'
import {
users
,
feed
} from './controllers'
new
Elysia
()
.
use
(
swagger
())
.
use
(
users
)
.
use
(
feed
)
.
listen
(3000)

OpenAPI / Swagger

Elysia 自动生成 OpenAPI 3.0 规范,以与跨多种语言的各种工具集成。

由于符合 OpenAPI 标准,Elysia 可以使用 Swagger 插件在一行中生成 Swagger。

端到端类型安全

在所有应用程序中同步类型
像 tRPC 一样快速移动且不破坏任何内容

悬停在代码下面以查看类型定义

typescript
// server.ts
import { 
Elysia
,
t
} from 'elysia'
const
app
= new
Elysia
()
.
patch
(
'/user/profile', ({
body
,
error
}) => {
if(
body
.
age
< 18)
return
error
(400, "Oh no")
if(
body
.
name
=== 'Nagisa')
return
error
(418)
return
body
}, {
body
:
t
.
Object
({
name
:
t
.
String
(),
age
:
t
.
Number
()
}) } ) .
listen
(80)
export type
App
= typeof
app
typescript
// client.ts
import { 
treaty
} from '@elysiajs/eden'
import type {
App
} from './server'
const
api
=
treaty
<
App
>('localhost')
const {
data
,
error
} = await
api
.
user
.
profile
.
patch
({
name
: 'saltyaom',
age: '21'
Type 'string' is not assignable to type 'number'.
}) if(
error
)
switch(
error
.
status
) {
case 400: throw
error
.
value
case 418: throw
error
.
value
}
data

找不到你要找的东西?

加入社区

Elysia 是 Bun 第一个 Web 框架最大的社区之一。

你可以向我们的社区和维护人员提问、提出新功能建议或报告 bug。


Elysia Feature Sheet

马上开始

搭建你的项目,并立即运行服务器

bun create elysia app

Built with 💖 dear