Обрабатывать http ошибки в перехватчике динамически? - PullRequest
0 голосов
/ 14 декабря 2018

Для обработки ошибок http я использую перехватчики.Например, когда ответ имеет статус 404, я должен перенаправить пользователя на страницу ошибки или, если статус ответа 500, я должен создать всплывающее окно.Но для некоторых состояний иногда мне нужно перенаправить, а иногда мне нужно показать всплывающее окно.

export default () => {
    axios.interceptors.response.use(
        (response) => {
            if (response.status == 404) {
                // redirect
            } else if (response.status == 500) {
                // sho popup
            } else if (status == 403) {
                // sometimes show popup
                // sometimes redirect
            }
        }
    )
}

Перенаправление или всплывающее окно зависят от страницы, поэтому, если запрос приходит со страницы A, а статус ответа 403, я должен перенаправить пользователя, но если запрос приходит со страницы B, мне нужно создать всплывающее окно.

Мое решение в маршрутизаторе, я определю мета для маршрутов

routes: [
        {
            path: Routes.Login.path,
            name: Routes.Login.name,
            component: Login,
            meta: { httpError: "redirect" },
        },
        {
            path: Routes.Register.path,
            name: Routes.Register.name,
            component: Login,
            meta: { httpError: "popup" },
        },
]

А в перехватчике я проверю, если response.status == 403 и route.meta == redirect, то перенаправить пользователя, или если currentroute.meta == popup затем показать всплывающее окно.

axios.interceptors.response.use(
        (response) => {
            if (response.status == 403) {
               if (route.meta.httpError == "redirect") {
                  // redirect
               } else if (route.meta.httpError == "pupup") {
                  // show popup
               }
            }
        }
    )

Плохая вещь здесь, я должен определить свойство httpError в мета каждого маршрута, статически.Так есть ли другой способ (динамический) для решения этой проблемы без статических свойств?

...