vue 如何获取后端返回来的code?


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且不让返回错误文本到页面上?

阅读 2.5k
1 个回答

你需要去 响应拦截器 里面检查 Promise.reject() 返回出来的数据是否是 完整的响应内容 data
因为有看到如果 responseStatus 不等于 401 或者 403 时,只会返回错误信息文本。

所以其实你现在直接输出 deleteAppAuth()error 多半只是错误描述信息。
修改成返回完整返回体就好了,只是你要确定其他的地方会不会有异常。因为会有历史代码会用到。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏