对于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
}
}
}
)
这里的坏事是我必须在每个路由的meta中静态定义httpError属性。那么,有没有其他方法(动态方法)来解决这个没有静态属性的问题呢?