动态处理拦截器中的HTTP错误?

时间:2018-12-14 12:44:00

标签: vue.js error-handling vue-router

对于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 == 403route.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属性。那么,有没有其他方法(动态方法)来解决这个没有静态属性的问题呢?

0 个答案:

没有答案