Получение текста ошибки laravel + vue3

Всем привет , пишу авторизацию , есть валидация и если валидация не прошла у меня возвращается 422 статус и сообщение об ошибке try {

        $credentials = $request->validate([
            'username' => 'required|string',
            'password' => 'required|string',
        ]);
    } catch (ValidationException $e) {

        return response()->json(['status'=>422,'message'=>'error auth','data'=>[]],422);
    }

и уже на vue я хочу вывести сообщение в консоль " error auth" , но у меня получается ошибка "Ошибка при отправке запроса TypeError: Cannot read properties of undefined (reading 'data')" вот код на vue

login() {
            axios.get('/sanctum/csrf-cookie')
                .then(response => {
                    axios.post('/login', {
                        username: this.username,
                        password: this.password
                    })
                        .then(res => {
                            console.log(res.data);
                            localStorage.setItem('x-xsrf-token', res.config.headers['X-XSRF-TOKEN'])
                            this.$router.push({ name: 'personal' })
                        })
                        .catch(e => {
                            console.log('Ошибка при отправке запроса',e);
                                this.errors = 'Ошибка авторизации';
                        });

                })
        }

ничего не получается , но если убрать в контроллере статус кода и он по дефолту будет приходить как 200 , то ошибка будет выводиться , просто статус будет 200 , а не тот , который я хочу указать . Кто знает как вывести ошибку и статус код был тот который я указываю в контроллере? Спасибо


Ответы (2 шт):

Автор решения: Алексей Шиманский

Дело в том, что типы статусов 400 и 500 расцениваются как ошибка. Они и называются клиентские и серверные ошибки. Поэтому их надо отлавливать в catch и заниматья обработкой этих статусов там.

.catch((err) => {
    console.log(err);   
});

В err будет информация и по code и response.status и прочее

Статусы 200, которые говорят, что запрос выпонился успешно - в then


Чтобы по тысяче раз не писать then, catch - самое оптимальное будет создать единый обработчик запросов и статусов и использовать его

→ Ссылка
Автор решения: noobaster

Ответы сервера со статусами 4ХХ и 5ХХ обрабатываются axios в блоке catch. Для обработки ошибок валидации я использую следующий код, который создает уведомление для пользователя:

.catch((error) => {
    
  if (error.response.status === 422){
    var errors = error.response.data.errors;
    for(const key in errors){          
      var err = errors[key]
      for (var e in err){
        //вывод ошибки пользователю
        this.$toast.error(err[e], {
          timeout: 0,
        })
       }
     }
   }
  //обработка других ошибок
}
→ Ссылка