Как генерировать сообщения об ошибках с помощью Zod на разных языках
Я хочу генерировать сообщения проверки на разных языках. Я хотел создать собственное промежуточное ПО, которое добавляет атрибут lang к объекту запроса. И после установки языка я буду проверять свои запросы с помощью Zod. Я не могу отправить lang в качестве другого параметра метода schema.parse(). Вот код:
Проверить ресурс
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(),
})
})
У меня есть метод getMessage, который просто возвращает объект списка сообщений.
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"
Я хочу сделать CreateUserSchema как
const params = {
params: object({
_id: z.string({
required_error: getMessage(req.body.lang),
}),
}),
};
Однако объект запроса здесь не переносится. Как сделать его динамичным?