Quiero generar mensajes de validación en diferentes idiomas. Quería crear mi propio middleware que agregara un atributo lang al objeto de solicitud. Y después de configurar lang, validaré mis solicitudes con Zod. No puedo enviar el idioma como otro parámetro al método schema.parse(). Aquí está el código:
ValidateResource
const validate = (schema: AnyZodObject) => (req: Request, res: Response, next: NextFunction) => { try { schema.parse({ body: req.body, query: req.query, params: req.params, }, ); next(); } catch (e: any) { if(e instanceof ZodError) return res.status(StatusCodes.BAD_REQUEST).send(e.flatten()); return next() } };CreateUserSchema
export const createUserSchema = z.object({ body : object({ name : z.string({ required_error : "Name is required" }), surname : z.string({ required_error : "last name is required" }), password : z.string({ required_error : "password is required" }), email : z.string({ required_error: "Email is required" }).email({ message : "Not a valid email" }), gender : z.enum([Gender.F,Gender.M]), profilePicture : z.string().url().default(config.get<string>("defaultProfilePictureURL")).optional(), phoneNumber : z.string({ required_error : "Phone number is required for singing up" }), dateOfBirth : z.date().optional(), }) })Tengo un método getMessage que simplemente devuelve un objeto de la lista de mensajes.
export function getMessage (lang : string) : messages { if(lang == "tr"){ return messagesInTurkish } return messagesInEnglish } export interface messages { forbidden : string, internalServerError : string, } const messagesInTurkish : messages = { forbidden: "Yasak Kaynak", internalServerError: "Server Hatası" } const messagesInEnglish : messages = { forbidden: "Forbidden", internalServerError: "Internal Server Error"Quiero hacer CreateUserSchema como
const params = { params: object({ _id: z.string({ required_error: getMessage(req.body.lang), }), }), };Sin embargo, el objeto de solicitud no se lleva aquí. ¿Cómo puedo hacer que sea dinámico?