Written by Paul
이것은 Matt Pocock의 원본 트윗입니다.
그는 Next API 라우트 핸들러를 Zod로 감쌌습니다. 저는 이것이 정말 좋은 아이디어라고 생각합니다!
우선, 위의 함수는 단지 TypeScript 선언일 뿐입니다. 구현된 함수가 아닙니다.
createHandler
를 사용하여 req.body
의 유효성 검사를 통해 POST 또는 PATCH 메서드를 구현할 수 있습니다.createHandler 선언
declare function createHandler<T extends z.ZodType>( schema: T, handler: ( req: Omit<NextApiRequest, keyof z.output<T>> & z.output<T>, res: NextApiResponse ) => void | Promise<void> )
위 코드에서
Omit
을 볼 수 있습니다. 이 Omit
은 NextApiRequest에서 스키마의 키 속성을 제외하는 것입니다.스키마 선언
const schema = z.object({ body: z.object({ id: z.string() }) })
따라서 위의 스키마의 키는
body
이며, 이 키는 다음 핸들러의 NextApiRequest
인 req
에서 생략됩니다.핸들러 선언
export const handler = createHandler(schema, (req) => { req.body.id; })