Blog, COLDSURF

Matt Pocock: createHandler with zod

This is the original Tweet that Matt Pocock’s.

He wrapped next api route handler with Zod. I think that’s a really good idea!

First, the above function is just a typescript declaration. It’s not implemented function. With createHandler , we can implement POST or PATCH method with req.body validation.

Declare 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>
)

In the above code, we can see Omit. That Omit is omitting schema’s key property in NextApiRequest.

Declare the schema

const schema = z.object({
	body: z.object({
		id: z.string()
	})
})

So above schema’s key is body , and it will be omitted in next handler’s NextApiRequest which will be req.

Declare the handler

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

← Go home