首页 > 解决方案 > 有没有办法绕过 node-fetch res.text() 来获取原始响应正文?

问题描述

我遇到了节点获取问题。我可以在 POSTMAN 中完美访问的 API 使用 node-fetch 抛出相同的错误,我无法让它吐出响应正文。我知道肯定有一个,并且我有理论为什么它可能格式不正确。

这是我的代码。

fetch(`apiUrl`, options)
    .then((res) => {
        console.log(res);
        return res.text();
        })
    .then((res) => {
        console.log(res);
        })
    .catch((err) => {
        console.log(err);
        }); 

此代码在调用 res.text() 后从不打印响应正文事件。我的问题是除了调用 .text() 之外还有另一种方法可以访问 RAW 响应正文,以便我可以查看 API 是否响应。它的响应状态为:200,我相当肯定有一个正文,因为当我从 PHP 卷曲并从 POSTMAN 请求时,我得到了预期的响应正文。

错误总是:

FetchError:无效的响应正文:apiUrl 原因:文件意外结束

标签: node.js

解决方案


所以我要发布这个问题的答案,因为它值得一个答案,其他人最终可能会遇到这个问题。基本上你需要小心 Express 打包的“fetch”版本与 node-fetch 不完全相同。他们处理错误的方式不同。在这种情况下,我的问题是一个空白响应,在这种情况下没有正文可以实际流式传输。express fetch 抛出了我上面描述的错误,但是 node-fetch 抛出了一个可理解的错误,并在调用 res.text() 时返回一个响应体,响应体只是空白。在我的应用程序中,我确保我总是使用 node-fetch 并且它更好。不完美,但如果可能,请避免使用 express fetch 依赖项。

巧合的是,我得到的间歇性空白响应正文的原因是由于缺少 Connection 标头。在我的所有请求中添加“连接:保持活动”解决了 API 未完成其答案的问题。

因此,这可能是这两个问题的次要答案,即作为最佳实践为所有 API 请求添加保持活动状态,除非有理由不这样做以避免 200 响应出现空白响应主体。


推荐阅读