react获取错误/响应捕获不工作

mfuanj7w  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(377)

我建立了一个注册页面,需要检查输入的电子邮件是否已经采取。当接收到重复的电子邮件时,它会在JavaSpringAPI后端停止,并返回“400”状态。
(我也尝试过使用spring注解 @column(unique=true) 但也无法捕获422错误。)
然后,我有一个状态的catch,它应该设置一个错误(存在一个字段);设置任何错误后,页面将不会继续。如果没有错误,页面将自动登录并重新路由到主页。
我尝试将错误捕获为错误、错误状态、错误响应和响应(从技术上讲,从后端接收到的异常并不是一个错误。)我似乎无法捕获它。
如果有人知道这里出了什么问题以及如何解决,我将不胜感激。
注册代码,我在其中留下了我试图捕捉响应的各种方法:

  1. const signUp = () => {
  2. axios
  3. .post('http://localhost:8080/signup', {
  4. email,
  5. password,
  6. firstName,
  7. lastName
  8. // address,
  9. // phoneNumber,
  10. // image
  11. })
  12. // eslint-disable-next-line consistent-return
  13. .catch((err) => {
  14. if (err.status) {
  15. setEmailUsedError('Already in use. ');
  16. }
  17. })
  18. .then(() => {
  19. post('/login', null, {
  20. email,
  21. password
  22. }).then((data) => {
  23. if ('token' in data) {
  24. sessionStorage.token = data.token;
  25. const { sub } = JSON.parse(atob(data.token.split('.')[1]));
  26. sessionStorage.email = sub;
  27. onLogin();
  28. history.push('/');
  29. }
  30. })
  31. .catch((err) => {
  32. if (err.res.status === 422) {
  33. setEmailError('Already in use. ');
  34. } else setServerError(true);
  35. });
  36. });
  37. };

然后浏览器中出现未捕获的错误消息:

更新:我变了 .then((res)... 接住

  1. .then((res) => {
  2. if (res.status) {
  3. setEmailUsedError('Already in use. ');
  4. }

signUp 函数到 .catch((err)... 现在它显示错误已被捕获,但没有按编码设置错误。不知道为什么。

我试过的时候也是这样 .catch((res)...

falq053o

falq053o1#

尽管可能还有其他因素在起作用,但根据控制台消息,这是您对 /signup 返回422的终结点,而不是 /login (如代码示例所示)。您可能希望检查调用它的封闭块本身是否被catch语句链接。
基于这样的假设 /signup 在紧接着 /login ,则需要与 .then(() => {post()...} .

相关问题