我有一个节点服务器,它主要从特定路径读取组件,执行代码,并将数据返回给另一个服务器。
有时在组件的代码执行过程中,我会得到403响应。
错误:
ApolloError: Response not successful: Received status code 403
我正在使用.catch()
来捕捉403响应,但它没有帮助,而且由于403,经常发生pod崩溃。
我已检查此StackOverflow答案-Fetch: reject promise and catch the error if status is not OK?
上面提到
由于4xx和5xx响应不是网络错误,因此无需捕获任何内容
是这样吗?
如果上述情况属实,是否可以像下面这样处理:
app.use((req,res) => {
res.status(403).send('');
})
1条答案
按热度按时间i7uq4tfw1#
4xx和5xx是否为网络错误?
不,它们是HTTP错误响应,* 成功地 * 通过网络从服务器传输到客户端。
我使用. catch()来捕获403响应
我假设你的意思是
fetch
给出了你链接到的问题。这是使用fetch
API的一个常见问题(一个footgun in my view)。fetch
只拒绝它对 * 网络错误 * 的承诺,而不是HTTP错误。所以,如果它不能联系到服务器,它将拒绝它的承诺。如果它成功地联系到服务器并收到HTTP错误响应,它 * 不会 *。您链接的问题(如this one)的答案和我上面链接的博客文章描述了如何使用网络和HTTP错误的公共路径来处理此问题:当你第一次得到
Response
对象时,检查它的ok
属性,如果不为真就抛出,然后在一个通用的拒绝处理程序中处理拒绝。但是,如果这些资源消失了(不太可能,但是答案应该是自包含的),以JSON为例,我通常会在项目的代码库中包含这样的内容:
我这样做是因为绝大多数时候,执行
fetch
的代码并不关心是否存在网络错误或HTTP错误,它只关心获取(以及相关的JSON解析)是否工作。