我尝试同时使用Zod和Prisma,但遇到了一些验证问题
在我的user.model.ts
文件中,我使用Zod进行了这些验证
//user.mode.ts file
const userSchema = z.object({
username: z.string({
required_error: "Username field is required",
}),
email: z
.string({
required_error: "Email field is required",
invalid_type_error: "This field must be in email format",
})
.email(),
password: z
.string({
required_error: "Password field is required",
})
.min(6, "Password must be at least 6 characters"),
});
export type UserModel = z.infer<typeof userSchema>;
在我的user.service.ts
文件中,我有一个函数想要使用user.model.ts
中的验证,我不知道这是否是使用它的方法
//user.service.ts file
export const createUser = async (
username: string,
email: string,
password: string
) => {
const user: UserModel = await prisma.user.create({
data: {
username: username,
email: email,
password: password,
},
});
return user;
};
这是authController.ts
的样子
//authController.ts file
export const signUpLogic = async (req: Request, res: Response) => {
const { username, email, password } = req.body;
try {
const hashedPassword = await bcrypt.hash(password, 10);
//
createUser(username, email, String(hashedPassword));
//
} catch (err) {
if (err instanceof PrismaClientKnownRequestError) {
if (err.code === "P2002") {
res.json({ message: "email already taken" });
}
}
}
};
但是当我运行代码测试验证时,终端抛出了一个prisma错误,该错误应该由catch
块处理,而不是在postman中显示错误消息。
而且验证不起作用。我仍然可以在电子邮件字段中输入错误的电子邮件格式
1条答案
按热度按时间u5i3ibmn1#
您忘记在
signUpLogic
中使用await
。而且验证也不起作用。我仍然可以在电子邮件字段中输入错误的电子邮件格式。
您没有使用zod来解析数据。
您可以执行以下操作:
第一个