独立模式
当我们使用 Guard 定义模式时,该模式将被添加到路由中。但如果路由提供了模式,它将被覆盖:
typescript
import { Elysia, t } from 'elysia'
new Elysia()
.guard({
body: t.Object({
age: t.Number()
})
})
.post(
'/user',
({ body }) => body,
{
// 这将覆盖 guard 模式
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
我们可以通过在 guard 选项中添加 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)