node.js - 有没有办法绕过 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 原因:文件意外结束
解决方案
所以我要发布这个问题的答案,因为它值得一个答案,其他人最终可能会遇到这个问题。基本上你需要小心 Express 打包的“fetch”版本与 node-fetch 不完全相同。他们处理错误的方式不同。在这种情况下,我的问题是一个空白响应,在这种情况下没有正文可以实际流式传输。express fetch 抛出了我上面描述的错误,但是 node-fetch 抛出了一个可理解的错误,并在调用 res.text() 时返回一个响应体,响应体只是空白。在我的应用程序中,我确保我总是使用 node-fetch 并且它更好。不完美,但如果可能,请避免使用 express fetch 依赖项。
巧合的是,我得到的间歇性空白响应正文的原因是由于缺少 Connection 标头。在我的所有请求中添加“连接:保持活动”解决了 API 未完成其答案的问题。
因此,这可能是这两个问题的次要答案,即作为最佳实践为所有 API 请求添加保持活动状态,除非有理由不这样做以避免 200 响应出现空白响应主体。
推荐阅读
- ide - 自动完成 MVC 查看路径
- c++ - 具有结构成员字符数组的 sscanf
- python - Cursor.execute 没有工作
- java - 实现和运行 Here API 的问题
- csv - 在 Databricks 中,检查路径是否存在
- angular - AdminModule 和 AppModule!请考虑将 SignUpComponent 移至导入 AdminModule 和 AppModule 的更高模块
- android - 更新 KeyStore 文件的证书
- python - 无法在 Python 中导入 merkletools 库
- .htaccess - 如何重定向匹配的完整子域 url,但使用 htaccess 使根子域转到其他地方
- programming-languages - 基于 BEAM 的动态语言