验证
Elysia 提供开箱即用的数据验证。
你可以使用 Elysia.t 来定义一个模式。
typescript
import { Elysia, t } from 'elysia'
new Elysia()
.post(
'/user',
({ body: { name } }) => `Hello ${name}!`,
{
body: t.Object({
name: t.String(),
age: t.Number()
})
}
)
.listen(3000)当你定义一个模式时,Elysia 会确保数据具有正确的格式。
如果数据与模式不匹配,Elysia 将返回 422 Unprocessable Entity 错误。
查看 验证。
使用您自己的
或者,Elysia 支持 Standard Schema,允许您使用您选择的库,例如 zod、yup 或 valibot。
typescript
import { Elysia } from 'elysia'
import { z } from 'zod'
new Elysia()
.post(
'/user',
({ body: { name } }) => `Hello ${name}!`,
{
body: z.object({
name: z.string(),
age: z.number()
})
}
)
.listen(3000)查看 Standard Schema 了解所有兼容的模式。
验证类型
您可以验证以下属性:
bodyqueryparamsheaderscookieresponse
一旦定义了模式,Elysia 将为您推断类型,因此您不必在 TypeScript 中单独定义模式。
查看 Schema Type 了解每种类型。
响应验证
当您为 response 定义验证模式时,Elysia 会在发送给客户端之前验证响应,并为您进行类型检查。
您也可以指定要验证的状态码:
typescript
import { Elysia, t } from 'elysia'
new Elysia()
.get(
'/user',
() => `Hello Elysia!`,
{
response: {
200: t.Literal('Hello Elysia!'),
418: t.Object({
message: t.Literal("I'm a teapot")
})
}
}
)
.listen(3000)查看 响应验证。
练习
让我们练习一下所学的内容。
Show answer
我们可以通过使用 t.Object 为 body 属性定义一个模式。
typescript
import { Elysia } from 'elysia'
new Elysia()
.get('/', ({ status, set }) => {
set.headers['x-powered-by'] = 'Elysia'
return status(418, 'Hello Elysia!')
})
.get('/docs', ({ redirect }) => redirect('https://elysiajs.com'))
.listen(3000)