提问人:StackMyFlow 提问时间:9/8/2023 更新时间:9/9/2023 访问量:315
如何正确捕获错误 - react-query next.js 13 路由处理程序
How to properly catch errors - react-query next.js 13 route handlers
问:
我正在开发一个小型应用程序,我想在用户注册之前检查该电子邮件是否已注册,如果是,则回复错误。
为此,我在 route.ts 文件中将以下响应发送到前端。
return new Response("User already exists", {status: 409})
or
return new Response("User added", {status: 200})
添加用户工作正常,没有问题,但是当我尝试添加用户两次时,即使我捕获了该错误并显示 toast 通知,它也会向我的控制台发送有关 409 错误消息的轴子。我怎样才能避免这种情况发生,为什么会发生这种情况?
const form = useForm<z.infer<typeof UserValidator>>({
resolver: zodResolver(UserValidator),
defaultValues: {
website: "",
email: "",
},
})
const {mutate: createUser, error, isLoading} = useMutation({
mutationFn: () => {return axios.post('/api/user', form.getValues()).then(res => res.data)},
onError: (err) => {
if(err instanceof AxiosError){
if(err.response?.status === 409){
return toast({
title: "This username already exists",
description: "Choose a different name",
variant: "destructive"
})
}
}
},
onSuccess: (data) => {
console.log("Success")
}
})
const onSubmit = () => {
createUser()
}
return(
<>
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className={`space-y-8 ${showForm ? 'visible' : 'hidden'}`}>
<div className="flex">
<FormField
control={form.control}
name="email"
render={({ field }) => (
<FormItem>
<FormLabel>Email</FormLabel>
<FormControl>
<Input placeholder="Email" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name="website"
render={({ field }) => (
<FormItem>
<FormLabel>Website</FormLabel>
<FormControl>
<Input placeholder="Website" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
</div>
<Button type="submit" isLoading={isLoading}>Submit</Button>
</form>
</Form>
</>
)```
答:
0赞
TkDodo
9/9/2023
#1
React Query 在开发模式下将失败的响应记录到控制台。在 v4(当前最新版本)中,可以将自定义记录器传递给 QueryClient 以避免这种情况。
从 v5 开始,自定义记录器将被删除,失败的响应将不再记录到控制台中 - 只会记录需要开发人员解决的真正警告,例如错误的 QueryKeys。
请注意,在这两个版本中,都不应在生产环境中记录任何内容 - 这些日志仅用于开发。
评论