我有基于react.js的应用程序,其中所有ajax调用都由fetch
进行。我想写一些允许我处理所有重定向的中间件(状态代码为302的响应)
我做了以下操作:主要启动文件window.fetch
被覆盖
(注意我在每个提取中放置console.log('some number')
以查看流程)
const fetch = window.fetch
window.fetch = function() {
return Promise.resolve(fetch.apply(window, arguments)).then((response) => {
console.log("middleware is working")
console.log(arguments)
console.log('1')
if (response.status == '302') {
window.location.replace("/login");
}
})
}
fetch("/adminInitData", {credentials: 'same-origin'})
.then((response) => {
response.json().then((data) => {
console.log("3")
});
}).catch(()=> {
some code
});
const destination = document.querySelector("#container");
ReactDOM.render(
<Provider store={store}>
<AppAdmin/>
</Provider>,
destination
);
在其中一个反应组件中,我有以下fetch
fetch(urls.ADMIN_ORDER_ALL_SHOT,
{credentials: 'same-origin',
headers: {'Content-Type': 'application/json;charset=UTF-8'},
method: 'GET',
})
.then((response) => {
console.log("2")
response.json().then((data) => {
if (response.status == '200'){
this.setBoxStatus(data)
}
});
}).catch((e)=> {
console.log('exception in "get" url '+ urls.ADMIN_AVAILABLE_BOX_LIST + " exception= " +e)
})
执行此代码时,控制台
中显示以下信息你能解释一下以下内容:
1)为什么会出现例外以及如何解决它?
2)为什么我的覆盖提取不是在主文件中调用,其中调用地址/adminInitData
?