Open2
H3 & Valibot で getValidatedQuery, getValidatedRouterParams, readValidatedBody を使用する
getQuery 等の代わりに使用するとサーバーサイドのバリデーションが簡潔になる
Valibot の parse
がそのままでは使用できないので、 parser
を使用する
server/api/foo.ts
import * as v from 'valibot'
const MySchema = v.object({
foo: v.pipe(
v.string(),
v.minLength(1),
),
bar: v.pipe(
v.string(),
v.minLength(1),
),
})
export default defineEventHandler(async (event) => {
// const query = getQuery(event)
const query = await getValidatedQuery(event, v.parser(MySchema))
// valid data or throw 400 Validation Error
return { query }
})
以前の実装を変更する場合は
参考にしたもの(pipe()
の使用と型定義の変更)
const valibot = <TSchema extends v.GenericSchema>(schema: TSchema) => (input: unknown) => v.parse(schema, input)