Задать вопрос
pro-dev
@pro-dev

Как отрефакторить работу с ошибками?

Привет! Есть повторяющийся код из вида в вид.

export default {
    data() {
      return {
        form: {
          name: null,
          dateFrom: null,
        },
        error: null,
        errors: []
      }
    },
    methods: {
      create() {
        this.error = null;
        this.errors = [];
        axios
          .post('/events/create', this.form)
          .then(() => {
            this.$router.push({name: 'events'});
          })
          .catch(error => {
            if (error.response) {
              if (error.response.data.error) {
                this.error = error.response.data.error;
              } else if (error.response.data.errors) {
                this.errors = error.response.data.errors;
              }
            } else {
             /* console.log(error.message);*/
            }
          });
      }
    }
  }


Суть в том, что после axios запроса на api получаются ошибки валидация или одна ошибка из Exeption на php.

Если сервер возвращает ошибку, то обрабатываем её
.catch(error => {
            if (error.response) {
              if (error.response.data.error) { //если ошибка от Exeption
                this.error = error.response.data.error;
              } else if (error.response.data.errors) { // Если ошибки валидации формы
                this.errors = error.response.data.errors;
              }
            } else {
             /* console.log(error.message);*/
            }
          });


Кроме того мы вынуждены записывать эти данные в двух местах:

create() {
        this.error = null;
        this.errors = [];
...}


data() {
      return {
       .....
        error: null,
        errors: []
      }
    },


1. Как это можно сократить?
2. Как это можно вынести из всех views куда-то в отдельное место, где vue будет обрабатывать ошибки валидации и exeption?
  • Вопрос задан
  • 74 просмотра
Подписаться 1 Средний 14 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы