【发布时间】:2020-10-22 11:00:51
【问题描述】:
有没有办法在发送之前不仅拦截而且响应 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);
}
);
我已尝试仅解析请求拦截器,但它试图继续满足请求。有没有人有解决这个问题的创意?也许有比使用拦截器更好的解决方案?
【问题讨论】:
-
您始终可以在生产代码中使用 mock Axios 库之一,例如 jest-mock-axios 或 moxios。只是一个想法¯\_(ツ)_/¯
-
我认为这基本上是最后的选择。我在搞乱 Electron 并基本上通过 HTTP 和 IPC 使用 axios,剩下的唯一问题是停止 axios 请求,而是通过 IPC 发送数据并响应好像 axios 已经通过 HTTP 完成了请求。
标签: javascript axios