javascript - 如何读取在 React 应用程序之外发出的请求的 http 状态?
问题描述
当用户尝试从与我们的 ReactJS 应用程序相同的路径(例如 http:/www.app.com/view/doc1/something.jpg)直接访问文件(例如 JPG)时,我们有一个 Cloudfront 操作 - 即请求首先到达云端,它会决定你是否拥有权限或者它是否存在,或者提供它 - 或者让你回到我们的 React 应用程序。
在浏览器网络活动列表中,对文件的请求在那里,并从云端返回,例如 403。
如何将该文件上的 http 请求状态读入 React 应用程序本身,以便我们可以处理 403/404 等?
我们目前只是在路线上匹配正则表达式,并期望如果您返回到 react 应用程序,出现问题并且有一个通用的“您无法获取此文件”页面 - 但我们希望提供服务基于状态码向用户发送更优雅的消息。
另一个概念是在这个文件路径上有一个登录页面,并让 react 应用程序触发预检以查看他们是否能够直接访问文件 - 并使用预检中的状态优雅地处理用户的响应.
或者,我希望能够询问浏览器对文件 x 的请求,并将其请求状态代码获取到 React 应用程序中以对其进行操作 - 或者听到其他人完成此操作的任何包或方式......
解决方案
我们的项目中也有类似的情况,所以我们将 axios 库包装在自定义HttpInterceptor
包装器中。这个包装HttpInterceptor
拦截器所有由您的浏览器进行的调用。
let HttpInterceptor = axios.create({
headers: {
Accept: "image/jpeg"
}
});
HttpInterceptor.interceptors.response.use(
response => {
if (response.status !== 200) {
// Redirect or Do whatever yu want to do if call fails
}
return response;
},
function(error) {
throw error;
}
);
export default HttpInterceptor;
推荐阅读
- postgresql - PostgreSQL 中有没有办法找到所有使用外部数据包装器的视图?
- c# - Firestore C#:权限缺失或不足
- javascript - 为什么这个函数只在 IE11 上需要分号?
- javascript - 如何实现“getAllChildrenById”方法
- sql-server - 我们如何在 Entity Framework Core 中测试连接弹性
- postgresql - PostgreSQL now() 和 transaction_timestamp() 函数之间有区别吗?
- d3.js - D3js:“:last 不是一个有效的选择器”?
- python - 插入表后如何获取更新、创建或失败的数据?
- r - GREP(或类似函数)确定R中字符串内和字符串之间的频率
- r - 有没有办法解决 gls 模型中的过度分散问题?