我建立了一个注册页面,需要检查输入的电子邮件是否已经采取。当接收到重复的电子邮件时,它会在JavaSpringAPI后端停止,并返回“400”状态。
(我也尝试过使用spring注解 @column(unique=true)
但也无法捕获422错误。)
然后,我有一个状态的catch,它应该设置一个错误(存在一个字段);设置任何错误后,页面将不会继续。如果没有错误,页面将自动登录并重新路由到主页。
我尝试将错误捕获为错误、错误状态、错误响应和响应(从技术上讲,从后端接收到的异常并不是一个错误。)我似乎无法捕获它。
如果有人知道这里出了什么问题以及如何解决,我将不胜感激。
注册代码,我在其中留下了我试图捕捉响应的各种方法:
const signUp = () => {
axios
.post('http://localhost:8080/signup', {
email,
password,
firstName,
lastName
// address,
// phoneNumber,
// image
})
// eslint-disable-next-line consistent-return
.catch((err) => {
if (err.status) {
setEmailUsedError('Already in use. ');
}
})
.then(() => {
post('/login', null, {
email,
password
}).then((data) => {
if ('token' in data) {
sessionStorage.token = data.token;
const { sub } = JSON.parse(atob(data.token.split('.')[1]));
sessionStorage.email = sub;
onLogin();
history.push('/');
}
})
.catch((err) => {
if (err.res.status === 422) {
setEmailError('Already in use. ');
} else setServerError(true);
});
});
};
然后浏览器中出现未捕获的错误消息:
更新:我变了 .then((res)...
接住
.then((res) => {
if (res.status) {
setEmailUsedError('Already in use. ');
}
在 signUp
函数到 .catch((err)...
现在它显示错误已被捕获,但没有按编码设置错误。不知道为什么。
我试过的时候也是这样 .catch((res)...
1条答案
按热度按时间falq053o1#
尽管可能还有其他因素在起作用,但根据控制台消息,这是您对
/signup
返回422的终结点,而不是/login
(如代码示例所示)。您可能希望检查调用它的封闭块本身是否被catch语句链接。基于这样的假设
/signup
在紧接着/login
,则需要与.then(() => {post()...}
.