Reactjs + Redux Необработанный отказ (TypeError): невозможно прочитать свойство 'data' из неопределенного - PullRequest
0 голосов
/ 17 февраля 2020

При реализации аутентификации с реакцией + redux, когда я пытаюсь зарегистрировать пользователя в действиях редукса, используя asyn c / await, я получаю эту ошибку в подвохе, вот код действий:

import axios from 'axios';
import { setAlert } from './alert';
import { REGISTRO_CORRECTO, REGISTRO_FALLIDO } from './types';

// Registro de Usuario
export const registro = ({
  usuario,
  interfac,
  password,
  descripcion
}) => async dispatch => {
  const config = {
    headers: {
      'Content-Type': 'application/json'
    }
  };

  const body = JSON.stringify({ usuario, password, interfac, descripcion });

  try {
    // Conex to backend
    const res = await axios.post('http://localhost:5000/api/usuarios', body, config);

    dispatch({
      type: REGISTRO_CORRECTO,
      payload: res.data
    });
  } catch (err) {
    const errors = err.response.data.errors;

    if (errors) {
      errors.forEach(error => dispatch(setAlert(error.msg, 'danger')));
    }

    dispatch({
      type: REGISTRO_FALLIDO
    });
  }
};

Запуск отправки дает мне эту ошибку:

  26 |      payload: res.data
  27 |    });
  28 |  } catch (err) {
> 29 |    const errors = err.response.data.errors;
     | ^  30 | 
  31 |    if (errors) {
  32 |      errors.forEach(error => dispatch(setAlert(error.msg, 'danger')));

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 18 февраля 2020

Вы получаете ошибку, поскольку поле errors не может существовать в данных объекта. В этом случае необходимо выполнить некоторые условия для проверки формата возвращаемого объекта перед тем, как обращаться к нему для получения данных.

Итак, вы можете обратиться к проверке ниже для вашей программы.

  } catch (err) {
    if(err.response.data && err.response.data.message){
       // todo
    }else if(err.response.data && err.response.data.errors){
       // todo
    }
...