Estoy tratando de usar el validador zod, con typeorm. Vi algunos tutoriales sobre cómo usar zod. y escribo un pequeño código pero no funciona, está diciendo "mensaje": "payloadSchema.safeParse no es una función". Estoy tratando de validar el método de tienda de productos.
export const createProduct = async (req: Request, res: Response) => { try { const payloadSchema = { body: z.object({ price: z.number({ required_error: "price is required", }), image: z.string({ required_error: "image is required", }), translations: z.object({ ge: z.object({ title: z.string({ required_error: "title is required", }), description: z.string({ required_error: "description is required", }), }), en: z.object({ title: z.string({ required_error: "title is required", }), description: z.string({ required_error: "description is required", }), }), }), }), }; type Payload = z.infer<typeof payloadSchema>; const parsedData = payloadSchema.safeParse(req.body); if (!parsedData.success) { res.status(400).send({ error: parsedData.error, }); return; } const { image, price, translations } = req.body; const product = new Product(); product.image = parsedData.image; product.price = parsedData.price; product.translations = parsedData.translations; await product.save(); return res.json(product); } catch (e) { if (e instanceof Error) { return res.status(400).json({ message: e.message, }); } } };
En payloadSchema
, el campo del body
debe ser z.object. Dado que coloca el req.body
en payloadSchema.safeParse(req.body), el campo del cuerpo se puede eliminar del payloadSchema
:
const payloadSchema = z.object({ price: z.number({ required_error: "price bitch!", }), image: z.string({ required_error: "image required", }), translations: z.object({ ge: z.object({ title: z.string({ required_error: "title is required", }), description: z.string({ required_error: "description is required", }), }), en: z.object({ title: z.string({ required_error: "title is required", }), description: z.string({ required_error: "description is required", }), }), }), });