Для обработки ошибок 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 в мета каждого маршрута, статически.Так есть ли другой способ (динамический) для решения этой проблемы без статических свойств?