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

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

我建立了一个注册页面,需要检查输入的电子邮件是否已经采取。当接收到重复的电子邮件时,它会在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)...

falq053o

falq053o1#

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

相关问题