Matt Pocock: zod와 함께 사용하는 createHandler

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이며, 이 키는 다음 핸들러의 NextApiRequestreq에서 생략됩니다.

핸들러 선언

export const handler = createHandler(schema, (req) => { req.body.id; })
 
← Go home