【发布时间】:2021-11-07 19:29:03
【问题描述】:
我正在尝试在我的 vue 应用程序中进行全局错误处理。我有一个 api.service.js 文件,其中包含我的 axios 以及创建和我的 get、post 函数:
/**
* Service to call HTTP request via Axios
*/
const ApiService = {
init(apiBaseUrl) {
Vue.use(VueAxios, axios);
Vue.axios.defaults.baseURL = apiBaseUrl;
},
/**
* Set the default HTTP request headers
*/
setHeader() {
Vue.axios.defaults.headers.common[
"Authorization"
] = `Bearer ${JwtService.getToken()}`;
},
setHeaderwToken(token) {
Vue.axios.defaults.headers.common["Authorization"] = `Bearer ${token}`;
},
/**
* Send the GET HTTP request
* @param resource
* @param slug
* @returns {*}
*/
get(resource, slug = "") {
var myBlob = new Blob([], {type:'text/plain'});
var init = { status: 200, statusText: "" };
var myResponse = new Response(myBlob, init);
return Vue.axios.get(`${resource}/${slug}`)
.catch((error) => {
if (error.response.status == 401) {
//401 response
if (resource != "CheckToken") {
// request isNot checktoken & 401 response, check if token is valid?
Vue.axios
.get("CheckToken")
.then((CheckTokenResponse) => {
console.log("CheckToken response");
if (CheckTokenResponse.data == "OK") {
//token valid + 401 response
init = { status: 401, statusText: "noAuthorityValid" };
myResponse = new Response(myBlob, init);
console.log(CheckTokenResponse);
console.log("//token valid + 401 response");
console.log(myResponse);
return myResponse;
} else {
init = { status: 401, statusText: "noTokenValid" };
myResponse = new Response(myBlob, init);
console.log(CheckTokenResponse);
console.log("//token NOT valid + 401 response");
return myResponse;
}
})
.catch(() => {
init = { status: 401, statusText: "noTokenValid" };
myResponse = new Response(myBlob, init);
return myResponse;
});
} else {
//request is CheckToken + 401 response
init = { status: 401, statusText: "noTokenValid" };
myResponse = new Response(myBlob, init);
console.log(error);
console.log("//request is CheckToken + 401 response");
return myResponse;
}
} else {
// != 401 response
console.log(error);
console.log("!= 401 response");
return error;
}
});
},
};
export default ApiService;
在我的 Vue 组件中,我正在调用我的 ApiService:
ApiService.get("MyFunction")
.then((response) => {
console.log("MyFunction " + response);
.catch((error) => {
console.log("MyFunction " + error);
});
},
我尝试创建自定义响应 (myResponse) 并返回它,但它返回为 undefined (我想这是一个错误的方法) 我想要实现的是, 当调用函数并从 api 返回错误代码时, (500、401、404..) 我想抓住它 如果是 401,那么我想调用“CheckToken”函数,然后如果 CheckToken 返回“OK”我想返回“noAuthorityValid”(表示令牌有效但该函数未经授权。),CheckToken 不正常,那么我想要返回 noTokenValid 并且我想在我调用我的函数的 vue 组件中执行它:
ApiService.get("MyFunction")
.then((response) => {
console.log("MyFunction " + response);
// if (response.statusText == noAuthorityValid)
{
// show snackbar("you are not authorized for this function")
}
})
.catch((error) => {
console.log("MyFunction " + error);
});
},
【问题讨论】:
标签: javascript vue.js error-handling vuejs2 axios