独立模式
当我们使用 保护器 定义一个模式时,模式将被添加到一个路由。但如果该路由提供了一个模式,它将被 覆盖:
typescript
import { Elysia, t } from 'elysia'
new Elysia()
.guard({
body: t.Object({
age: t.Number()
})
})
.post(
'/user',
({ body }) => body,
{
// 这将覆盖保护器模式
body: t.Object({
name: t.String()
})
}
)
.listen(3000)如果我们想要一个模式与路由模式 共存,我们可以将其定义为 独立模式:
typescript
import { Elysia, t } from 'elysia'
new Elysia()
.guard({
schema: 'standalone',
body: t.Object({
age: t.Number()
})
})
.post(
'/user',
// body 将同时拥有 age 和 name 属性
({ body }) => body,
{
body: t.Object({
name: t.String()
})
}
)
.listen(3000)模式库的互操作性
独立模式之间的模式可以来自不同的验证库。
例如,你可以使用 zod 定义独立模式,而使用 Elysia.t 定义本地模式,两者可以互换使用。
任务
通过使用独立模式来使请求体中的 age 和 name 属性变为必需。
Show answer
我们可以通过在保护器选项中添加 schema: 'standalone' 来定义独立模式。
typescript
import { Elysia, t } from 'elysia'
import { z } from 'zod'
new Elysia()
.guard({
schema: 'standalone',
body: z.object({
age: z.number()
})
})
.post(
'/user',
({ body }) => body,
{
body: t.Object({
name: t.String()
})
}
)
.listen(3000)