我们的原则
为人类设计
我们的目标是设计一个符合人体工程学、合理且高效的框架,即使是初学者也能轻松使用
设计时避免不必要的复杂性和类型复杂性,让您专注于构建
一个感觉 就像 JavaScript 的框架
import { Elysia, file } from 'elysia'
new Elysia()
.get('/', 'Hello World')
.get('/image', file('mika.webp'))
.get('/stream', function* () {
yield 'Hello'
yield 'World'
})
.ws('/realtime', {
message(ws, message) {
ws.send('got:' + message)
}
})
.listen(3000)
顶级水平 类型安全
自带 验证器
支持 标准 Schema
Elysia 提供强大的内置验证,但您也可以引入您喜欢的验证器,例如 Zod、Valibot、ArkType、Effect 等
支持无缝的类型推断和 OpenAPI。您将感觉 如鱼得水。
import { Elysia, t } from 'elysia'
new Elysia()
// Try hover body ↓
.post('/user', ({ body }) => body, {
body: t.Object({
name: t.Literal('SaltyAom'),
age: t.Number(),
friends: t.Array(t.String())
})
})
import { Elysia } from 'elysia'
import { z } from 'zod'
new Elysia()
// Try hover body ↓
.post('/user', ({ body }) => body, {
body: z.object({
name: z.literal('SaltyAom'),
age: z.number(),
friends: z.array(z.string())
})
})
import { Elysia } from 'elysia'
import * as v from 'valibot'
new Elysia()
// Try hover body ↓
.post('/user', ({ body }) => body, {
body: v.object({
name: v.literal('SaltyAom'),
age: v.number(),
friends: v.array(v.string())
})
})
import { Elysia } from 'elysia'
import { type } from 'arktype'
new Elysia()
// Try hover body ↓
.post('/user', ({ body }) => body, {
body: type({
name: '"Elysia"',
age: 'number',
friends: 'string[]'
})
})
import { Elysia } from 'elysia'
import { Schema } from 'effect'
new Elysia()
// Try hover body ↓
.post('/user', ({ body }) => body, {
body: Schema.standardSchemaV1(
Schema.Struct({
name: Schema.Literal('Elysia'),
age: Schema.Number,
friends: Schema.Array(Schema.String)
})
)
})
用 OpenAPI 与您的实际 API 打招呼
我们认真对待 OpenAPI 文档
深度集成 OpenAPI 架构
Elysia 可以开箱即用地生成 API 文档
所有这些只需 1 行
是的,您没看错
只需 1 行代码,您就可以轻松获得完整的 API 文档
借助 OpenAPI Type Gen,Elysia 可以将 TypeScript 类型 转换为 API 文档 (类似于 FastAPI,但基于 TypeScript 类型)
import { Elysia } from 'elysia'
import { openapi } from '@elysiajs/openapi'
new Elysia()
.use(openapi())
.listen(3000)
import { Elysia } from 'elysia'
import { openapi, fromTypes } from '@elysiajs/openapi'
export const app = new Elysia()
.use(
openapi({
references: fromTypes()
})
)
11.88ms
POST /character/:id/chat
回放
对于 DevOps
OpenTelemetry
Elysia 原生支持 OpenTelemetry。监控功能内置,因此您可以轻松监控您的服务,无论平台如何。
import { treaty } from '@elysiajs/eden'
import type { App } from './server'
const api = treaty<App>('api.elysiajs.com')
const { data } = await api.profile.patch({
age: 21
})
对于前端
端到端类型安全
像 tRPC 一样,Elysia 提供从后端到前端的类型安全,而无需代码生成。前端和后端之间的交互在编译时和运行时都经过类型检查。
21x
比 Express 更快
6x
比 Fastify 更快
Elysia Bun
2,454,631 请求/秒Gin Go
676,019
Spring Java
506,087
Fastify Node
415,600
Express Node
113,117
Nest Node
105,064
以每秒请求次数进行测量。数据来源于官方 TechEmpower 基准测试 第 22 轮(2023-10-17)的 PlainText 结果。
自信地 测试
通过 自动补全 实现类型安全
Elysia 提供了一个类型安全的层,用于与服务器交互和测试,从路由到参数。
借助自动补全,您可以轻松编写服务器测试,而无需任何麻烦。
import { treaty } from '@elysiajs/eden'
import { app } from './index'
import { test, expect } from 'bun:test'
const server = treaty(app)
test('should handle duplicated user', async () => {
const { error } = await server.user.put({ username: 'mika',
})
expect(error?.value).toEqual({
success: false,
message: 'Username already taken'
})
})
人们对
因为有你
Elysia 不是由某个组织拥有 ,而是由志愿者和社区驱动。 Elysia 的存在离不开这些优秀的赞助者。
感谢您让 Elysia 成为可能
我们能够全职开发 Elysia,全靠您的支持。
来自我们社区的爱
Elysia
专为人类设计的框架
速度
顶级性能
类型安全
同类最佳
开发者体验
出色
OpenAPI 支持
独一无二