【问题标题】:Unable to catch error in React from Express无法从 Express 中捕获 React 中的错误
【发布时间】:2021-03-21 05:05:51
【问题描述】:

我在处理来自客户端的 Express 注册 API 的错误时遇到问题。我正在使用带有上下文的 React 在我的网站中创建一个全局状态。

我像这样在 React 中构建了上下文提供程序:

const AuthContext = React.createContext()

export function useAuth() {
    return useContext(AuthContext)
}

export function AuthProvider({ children }) {
  
    const [currentUser, setCurrentUser] = useState()

    function signup(email, password) {
        if (emailRe.test(email) && passwordRe.test(password)) {
            axios.post('http://localhost:4000/users/create', {
                email: email,
                password: password
            }).then((res) => {
                setCurrentUser(res);
                return res;
            }).catch((error) => {
                return new Error("Can't register")
            });
        };
    }
    const value = {
        currentUser,
        signup
    }

    return (
        <AuthContext.Provider value={value}>
            {children}
        </AuthContext.Provider>
    )
}

在我的注册页面上,我有以下代码:


function Registration(){

    //some code

    const { signup } = useAuth()
    const onSubmit = async (e) =>{
        e.preventDefault()

        if (password1===password2){
            try {
                let res = await signup(email,password1);
            } catch {
                setEmailError(true) //<- this is where it does not work, I can't catch the error
            }
        }
    }
    return(
       ////
    )
}

这个问题是我无法处理来自注册页面中注册功能的问题。有没有办法保持当前结构或者我必须在注册中移动整个注册功能(但我将无法很容易地更改上下文值)。

【问题讨论】:

    标签: javascript reactjs axios try-catch react-context


    【解决方案1】:

    尝试改变

    return new Error("Can't register")

    throw new Error("Can't register")

    然后像这样捕获错误

    try {
      let res = await signup(email, password1);
    } catch (error) {
      console.log(error)
      setEmailError(true);
    }
    

    【讨论】:

    • 现在发生错误时,我得到“未处理的拒绝(错误):”无法注册“”
    • 这不是你需要的吗?
    • 我仍然遇到同样的错误......让我再检查一下是否可以找到任何东西
    • 我不明白你想要什么。你能看到控制台日志吗?如果是,这就是您所需要的,不是吗?
    • 它会记录错误但不会设置电子邮件错误。无论如何我认为所有这些代码背后的想法都是错误的,我将 axios 放在注册页面中,它现在可以正常工作。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 2011-02-23
    • 2020-02-19
    • 2013-07-30
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多