當我在失眠癥中測驗它時,我試圖在 json 中得到 zod 驗證錯誤,但我只在終端和失眠癥中得到它,它告訴我錯誤:無法連接到服務器我看到了一些示例并且它在任何地方都有效......不明白為什么它不起作用...
我的注冊方法
export const register = async (req: Request, res: Response) => {
const payloadSchema = z
.object({
firstname: z.string({
required_error: "Firstname is required",
invalid_type_error: "Title must be a string",
}),
lastname: z.string({
required_error: "Lastname is required",
invalid_type_error: "Title must be a string",
}),
email: z
.string({ required_error: "Email is required" })
.email({ message: "Invalid email address" }),
password: z.string(),
confirm: z.string(),
})
.refine((data) => data.password === data.confirm, {
message: "Passwords don't match",
path: ["confirm"],
});
const parsedData = await payloadSchema.parseAsync(req.body);
try {
const result = await User.findOne({ where: { email: parsedData.email } });
if (result) {
return res.status(400).json({
success: false,
error: "User already exists",
});
}
const user = new User();
user.firstname = parsedData.firstname;
user.lastname = parsedData.lastname;
user.email = parsedData.email;
user.password = parsedData.password;
await user.save();
const accessToken = jwt.sign(
{ userId: user.id },
process!.env!.TOKEN_SECRET!
);
return res.status(200).json({
success: true,
createdUser: user,
accessToken: accessToken,
});
} catch (e) {
if (e instanceof ZodError) {
return res.status(400).json({
success: false,
error: e.flatten(),
});
} else if (e instanceof Error) {
return res.status(400).json({
message: e.message,
});
}
}
};
那么做錯了什么,我該如何解決?感謝關注。
uj5u.com熱心網友回復:
const parsedData = await payloadSchema.parseAsync(req.body);
如果驗證失敗,來自 Zod的parseAsync呼叫將引發錯誤,但在您的代碼中,它位于 try/catch 塊之外,請嘗試將其移入:
try {
const parsedData = await payloadSchema.parseAsync(req.body);
const result = await User.findOne({ where: { email: parsedData.email } });
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/495995.html
標籤:javascript 打字稿 验证 打字机 佐德
