Как отобразить тело ошибки на внешнем интерфейсе с помощью axios

Моя конечная точка быстрого API находится здесь:

@app.post("/api/signup", status_code=status.HTTP_200_OK)
async def signup( credentials : signupcred ):
  try: 
   print(credentials.email,  credentials.password1, credentials.name )
   response = account.create(email= credentials.email, password= credentials.password1, name = credentials.name , user_id= ID.unique() )

   return {response}

  except Exception as e: 
         raise HTTPException(status_code= status.HTTP_403_FORBIDDEN)  # Return an appropriate error status code

во внешнем интерфейсе я хочу напечатать ответ после возникновения исключения, потому что ответ хорошо объясняет ошибку. Я не хочу отправлять пользователю код ошибки http.

мой интерфейс:

const handlesignup = async (e: any) => {
  e.preventDefault();
  setLoading((loading) => !loading);
  try {
    const signupresponse = await axios.post("/api/signup", {
      email: signupemail,
      password1: password1,
      name: name,
    }); // Send as query paramers );
    // const loginresponse = await axios.post('/api/login', {email, password} )// Send as query paramers );
    // setIsloggedin(()=> true)
    router.replace("/dashboard");
    setLoading((loading) => !loading);
  } catch (error) {
    alert(error);
  }
};

console.info не работает, потому что я использую nextjs с быстрым API-интерфейсом. Я просто хочу напечатать ответ от функции создания во внешнем интерфейсе, чтобы пользователи знали, почему произошла ошибка функции. На данный момент предупреждение показывает: AxiosError: Ошибка запроса с кодом состояния 403.

Код состояния 500 означает, что ваш сервер каким-то образом вышел из строя. Посмотрите журналы Python и посмотрите, в чем ваша ошибка.

M.O. 14.04.2024 22:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
89
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если я правильно понимаю, вы хотите использовать другой useState<AxiosError>(), поэтому в .catch(error) вы можете setError(error), а затем в возвращаемом компоненте вы можете отобразить его...

return (
    <div> 
        ...
        {error && error.response.data.message}
    </div>
);

Я не знаю точного пути к сообщению в AxiosError, но если вы используете Typescript, вы можете нажать F12 и просмотреть типы.

error не будет AxiosResponse, это будет AxiosError
Phil 15.04.2024 01:43
Ответ принят как подходящий

См. Axios — Обработка ошибок

Вы можете получить доступ к телу ответа через error.response?.data.

Чтобы отобразить его в компоненте Next.js, вы обычно просто используете состояние React, например

const [error, setError] = useState<string>();

const handlesignup = async (e: any) => {
  e.preventDefault();
  setError("");
  setLoading(true);
  try {
    const signupresponse = await axios.post("/api/signup", {
      email: signupemail,
      password1: password1,
      name: name,
    }); // Send as query paramers );
    // const loginresponse = await axios.post('/api/login', {email, password} )// Send as query paramers );
    // setIsloggedin(()=> true)
    router.replace("/dashboard");
  } catch (error) {
    console.warn('Signup failed', error);
    setError(error.response?.data ?? error.message);
  } finally {
    setLoading(false);
  }
};

if (error) {
  return <p className = "error">{error}</p>;
}

Это сделало это, большое спасибо. Первоначальный словарь ошибок не показывал эту информацию, возможно, она была обрезана диалоговым окном предупреждения. Спасибо!

C A OB1 15.04.2024 17:29

Другие вопросы по теме