javascript - axios:如何拦截和响应axios请求

标签 javascript axios

有没有办法不仅拦截而且在发送之前响应 axios 请求?如,从浏览器发送请求并从浏览器响应 + 阻止它发送请求。
我知道我可以使用 axios interceptors在请求和响应发送并返回到组件之前拦截请求和响应,我知道在请求拦截器中我可以抛出错误并用失败的请求触发响应拦截器。我怎样才能为成功的请求做同样的事情?给定某些条件,我希望 axios 响应,就好像它实际上从未通过拦截器时传递给服务器一样。这可能吗?
这是到目前为止我所拥有的伪代码:

      axios.interceptors.request.use(
      request => {
        if (localResponse) {
              throw { isLocal: true, data: { hello: 'world' } }; // <- this will stop request and trigger 
                                                                 // response error. I want to trigger 
                                                                 // the actual response callback
        } else {
            return request;   // <- will perform full request
        }
      },
      error => {
        return Promise.reject(error);
      }
    );

    axios.interceptors.response.use(
      response => {
        return response; // <- I want to trigger this callback
      },
      error => { // <- so far i can only trigger a response error
        if (error?.isLocal) { 
          return Promise.resolve(error.data); 
        }
        
        return Promise.reject(error);
      }
    );
我试过只解决请求拦截器,但它试图继续满足请求。有没有人有解决这个问题的创意?也许有比使用拦截器更好的解决方案?

最佳答案

设法自己编写了一个解决方案。这样我所有的 axios 调用都不必改变,我可以改变拦截器的行为。
注意:如果有人提出更好的解决方案,我会很乐意将他们的答案标记为正确并投赞成票。目前,这是我能想到的最佳解决方案。
解决方案
这是我能够解决问题的方法

      axios.interceptors.request.use(
      request => {
        if (localResponse) {
              throw { isLocal: true, data: { hello: 'world' } }; // <- this will stop request and trigger 
                                                                 // response error. I want to trigger 
                                                                 // the actual response callback
        } else {
            return request;   // <- will perform full request
        }
      },
      error => {
        return error?.isLocal 
                    ? Promise.resolve(error); // <- triggers response intercept
                    : Promise.reject(error);
      }
    );

    axios.interceptors.response.use(
      response => {
        return response; 
      },
      error => {
          error?.isLocal 
                ? Promise.resolve(error); // <- sends as successful response
                : Promise.reject(error);
      }
    );
基本上我正在做的是抛出一个错误以阻止请求通过,然后解决错误而不是拒绝它。这有点hacky,但它完成了工作。

关于javascript - axios:如何拦截和响应axios请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62686283/

相关文章:

javascript - 如何从 JavaScript 的 JSON 数据以 HTML 格式显示图像

javascript - Express + MongoDB - req.query 对象

javascript - 如果 token 过期则注销

json - 无法在electron-vue中获取本地json文件

reactjs - params 对象(API key )未与 axios.create 一起发送

javascript - 如何映射来自 REST 调用的响应?

javascript - 如何为这个 jquery 增量插件编写一个函数?

javascript - 从 React Context API 渲染函数中的 map 函数渲染 HTML

JavaScript 关闭已经打开的 div

node.js - ObjectId 转换为 api 中的字符串,nodejs 到 reactjs