验证错误
如果你使用 Elysia.t 进行验证,你可以根据未通过验证的字段提供自定义错误消息。
typescript
import { Elysia, t } from 'elysia'
new Elysia()
.post(
'/',
({ body }) => body,
{
body: t.Object({
age: t.Number({
error: '年龄必须是数字'
})
}, {
error: 'Body 必须是一个对象'
})
}
)
.listen(3000)Elysia 会用你提供的自定义消息覆盖默认错误消息,详见 自定义验证消息。
验证详情
默认情况下,Elysia 还会提供一个 验证详情 来解释验证出了什么问题,如下所示:
json
{
"type": "validation",
"on": "params",
"value": { "id": "string" },
"property": "/id",
"message": "id 必须是一个数字",
"summary": "属性 'id' 应为以下之一:'numeric', 'number'",
"found": { "id": "string" },
"expected": { "id": 0 },
"errors": [
{
"type": 62,
"schema": {
"anyOf": [
{ "format": "numeric", "default": 0, "type": "string" },
{ "type": "number" }
]
},
"path": "/id",
"value": "string",
"message": "期望一个联合类型的值",
"errors": [{ "iterator": {} }, { "iterator": {} }],
"summary": "属性 'id' 应为以下之一:'numeric', 'number'"
}
]
}但是,当你提供自定义错误消息时,它将完全覆盖 验证详情
要恢复验证详情,你可以将你的自定义错误消息包裹在一个 验证详情 函数中。
typescript
import { Elysia, t, validationDetail } from 'elysia'
new Elysia()
.post(
'/',
({ body }) => body,
{
body: t.Object({
age: t.Number({
error: validationDetail('年龄必须是数字')
})
}, {
error: validationDetail('Body 必须是一个对象')
})
}
)
.listen(3000)练习
让我们尝试扩展 Elysia 的上下文。
Show answer
我们可以通过向 schema 提供 error 属性来提供一个自定义错误消息。
typescript
import { Elysia, t } from 'elysia'
new Elysia()
.post(
'/',
({ body }) => body,
{
body: t.Object({
age: t.Number({
error: '自定义错误'
})
})
}
)
.listen(3000)