service请求拦截
http.interceptors.response.use(
(response) => {
const { data: { data, code, status, error = {} } = {} } = response;
if (code === 'REL001') {
return Promise.reject(error.code);
}
if (!status) {
const msg = error.msg || '服务端执行出错!';
Message.error(msg);
return Promise.reject(msg);
}
return data || {};
},
(error) => {
if (error.response) {
// The request was made and the server responded with a status code
// that falls out of the range of 2xx
const { status: responseStatus } = error.response;
if (responseStatus === 401) {
// 记录当前跳出登录地址,登录成功后跳回来
Cookies.set('origin_url', window.location.href);
} else if (responseStatus === 403) {
// 没有权限
Message.error('没有权限操作!');
} else {
const msg = error.response?.data?.error?.msg || '服务端接口异常!';
Message.error(msg);
return Promise.reject(new Error(msg));
}
} else {
// Something happened in setting up the request that triggered an Error
console.error(error);
return Promise.reject(new Error('请求出错!'));
}
return Promise.reject(error);
}
);
页面获取code
deleteAppAuth(row.id).then(
() => {
this.$message.success('删除资源成功!');
this.search();
},
(error) => {
if (error.code === 'REL001') {
this.authMsg = `“${row.name}”资源上存在关联数据,请再次确认是否要删除!`;
this.$confirm(this.authMsg, '二次确认', {
confirmButtonText: '再次确认',
cancelButtonText: '取消',
closeOnClickModal: false,
type: 'warning',
}).then(
() => {
secondSureDeleteAuth(row.id).then(() => {
this.$message.success('删除资源成功!');
this.$router.go(-1);
});
},
() => {
console.log('二次确认取消');
}
);
}
}
);
但是这样打印error.code是undefined,而且还把错误文本返回到页面上了
求大佬指点,怎么才能拿到code且不让返回错误文本到页面上?
你需要去 响应拦截器 里面检查
Promise.reject()
返回出来的数据是否是 完整的响应内容data
。因为有看到如果
responseStatus
不等于401
或者403
时,只会返回错误信息文本。所以其实你现在直接输出
deleteAppAuth()
的error
多半只是错误描述信息。修改成返回完整返回体就好了,只是你要确定其他的地方会不会有异常。因为会有历史代码会用到。