Как вы выполняете обработку ошибок axios в React (для аутентификации пользователя)?

#reactjs #authentication #error-handling #axios #react-hooks

#reactjs #аутентификация #обработка ошибок #axios #реагирующие хуки

Вопрос:

Я пытаюсь реализовать аутентификацию пользователя в Context.js

 import React, {useState} from 'react'
import config from './config/config'
import axios from 'axios'
const Context = React.createContext()

function ContextProvider({children}) {

    const authenticate = async (email, password) => {
        let e = null;
        axios.post(
            `${config.url}/auth/login`,
            JSON.stringify({email, password}),
            { headers: { 'Content-Type': 'application/json' } }
        ).then(function (response) {
            //save token
            //save user
            //redirect to app home
        }).catch( error => {
            e = error
        })
        return e
    }

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

export {ContextProvider, Context}
 

а затем вызываете его с помощью useContext Hook в Login.js компонент.

 export default function Login() {
const context = useContext(Context)
const [errors, setErrors] = useState(null)
const [email, setEmail] = useState("")
const [password, setPassword] = useState("")

const loginUser = (e) => {
    e.preventDefault();
    const axiosErrors = context.authenticate(email, password)
    console.log(axiosErrors)
 

Хотя я могу фиксировать ошибки / в блоке catch { console.log (e) } вызова axios, я не могу фиксировать их в Login.js .
Таким образом, приведенный выше console.log записывает на консоль следующее:

 {axiosErrors: Promise}
POST http://localhost:7000/api/auth/login 401 (Unauthorized)
 

Комментарии:

1. Почему бы вам не попробовать / поймать в своем компоненте входа в систему? Затем вы можете обрабатывать состояние ошибки в блоке catch

2. @tmhao2005 спасибо за идею, я мог бы это сделать. Есть ли какой — нибудь другой способ сделать это ?

3. Или вы также можете попробовать / поймать в authenticate самом себе, тогда вы бы вернули статус false. Затем вы просто получаете результат функции в своем Login компоненте, не выполняя здесь try / catch. Единственное место, которое нужно попробовать / поймать, если вы идете на это дело