问题标签 [node-fetch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 我看似有效的 URL 在本地解析,但在部署在 heroku 上时失败
这是我关于stackoverflow的第一个问题,所以请温柔一点。我正在使用 node.js 构建一个简单的应用程序,该应用程序依赖于对外部地理编码服务的 API 调用。我的程序在本地运行,但在部署到 heroku 时失败。这是失败的功能:
我认识到这段代码目前是一堆不必要的编码和冗余标头。我失败的调试过程的副作用。在本地运行时,程序会向服务发送一个有效的 url 并返回响应数据。当部署在heroku上时,
投掷
我已经为我的问题编辑了这个 url 以保护 API 密钥,但是当我使用那个字符串(减去引号)并通过我的浏览器运行它时,它会返回有效的 JSON。
在部署之前,我根本没有对我的 url 进行任何编码 - 我只是构建了一个字符串并将其提供给 node-fetch 模块的 fetch 方法。它在 Heroku 上出错,显示消息“TypeError:仅支持绝对 URL”。从那以后,我了解到此错误消息意味着 node-fetch 的请求方法无法解析协议或主机名。我已经设法确定,当部署在 heroku 上时,它无法解析两者。
我的本地环境和 heroku 的明显区别在于我通过 heroku 的仪表板而不是通过我的 .env 文件设置了环境变量。因为我有点不清楚它是如何工作的,所以我最近的大部分调试都试图确保我提供给 fetch API 的字符串是一致的、统一的编码。因此,我已经预先转义了我的代码,手动对其进行了 utf8 编码,通过 URL 模块运行它,并将该 url 编码的输出输入到函数中而无需触摸它。它仍然在本地工作并在远程失败。
我的基本堆栈是 MongoDB、Express、Node、Bootstrap。我对我的云 MongoDB 服务器进行的调用以及对我从中获取地理编码数据的 API 的调用也是如此。只有这些对我的地理编码服务的调用失败,所以我用于 MongoDB 连接的环境变量按预期运行。
谢谢你的帮助!
编辑1:
为了回答下面的评论(对我尝试的评论答案的格式感到抱歉;我现在知道markdown 格式在评论中受到限制),我发布的错误是使用命令“heroku logs --tail”从heroku 记录的。我已经手动记录了我要编码的 URL(下面是一个经过编辑的示例):
以及heroku报告的错误:
编辑2:
我想我可能没有在我的帖子中提供足够的错误日志记录。这是更完整的错误日志。我希望这对可以反过来帮助我的人有所帮助。
node.js - 如何在节点获取标头中使用嵌套对象/数组表示法?
我正在尝试根据以下规范从打字稿应用程序进行fetch() api 调用:
- 方法:POST
- 请求网址:https ://cloud.memsource.com/web/api2/v1/projects/KmtNyVlz1skQd2aMVEipp7/jobs?token=AuthenticationToken
- (标题)内容处置:文件名*=UTF-8''file.txt
- (标题)Memsource:{“targetLangs”:[“de”,“fr”]}
- (Header) Content-Type: application/octet-stream
- 响应:作业 UID(例如 dOYgeXzAdAbj4xFjuEVZP2)
尝试在节点获取调用中对标头使用嵌套对象/数组值时出现以下错误。
(属性) RequestInit.headers?: HeadersInit Type '{ 'Content-Type': string; “内容处置”:字符串;'Memsource': { 'targetLangs': string[]; }; }' 不可分配给类型 'HeadersInit'。类型'{'Content-Type':字符串;“内容处置”:字符串;'Memsource': { 'targetLangs': string[]; }; }' 缺少类型 'Headers' 中的以下属性:forEach、append、delete、get 和 7 more.ts(2322) index.d.ts(45, 5):预期类型来自属性 'headers'在“RequestInit”类型上声明
下面是给出问题的代码行。
我应该怎么做才能解决问题?我不能使用这个符号吗?
node.js - TypeScript CLI:如何将来自节点获取调用的八进制流响应保存到获取请求?
我正在使用 Node-Fetch 向 Web api 发出获取请求。它返回八位字节流响应以保存为本地文件。
我尝试使用 downloadjs (download()) 和 download.js (downloadBlob()),但它们都不起作用。
downloadBlob() 返回“createObjectURL is not a function”错误,并且 download() 返回“window is not defined at object”。错误。
电话在下面
我想我在这里完全迷失了。我应该怎么做才能将文件下载到本地驱动器?我应该如何构造 .then 在这里阻塞?
javascript - 无法从 nodejs 中的 API URL 获取图像文件
我正在尝试使用 API URL 从 url 获取 jpeg 图像文件。当我尝试保存文件时,出现以下错误:
(node:18636) UnhandledPromiseRejectionWarning: FetchError: invalid json response body at [API url] reason: Unexpected token � in JSON at position 0
使用 Advance Rest Client chrome Web 应用程序显示图像时,该 URL 有效。但是使用上面的代码它在 node.js 中不起作用。有人可以帮我解决这个问题吗?那将不胜感激。
javascript - 在异步 AWS Lambda 函数中使用带有 node-fetch 模块的 node.js 时遇到问题
这是我想要做的:我有一个由 webhook 触发的 lambda 函数,它将处理该数据并使用它向 api 发出 POST 请求。
我正在使用 Node.js 12 和 node-fetch 模块。
现在该函数被正确触发,但它不会在第一次调用时发送 POST。但是如果我在短时间内重复触发 lambda 函数,第一次之后的请求就会通过。
这是我的 lambda 函数的 index.js 文件中的代码:
当我删除(event)前面的异步时,请求第一次通过,但首先发送 webhook 的服务器没有得到响应。
所以基本上我需要每次调用函数时发送 POST 并且还能够返回 200 状态码。
我没有太多使用异步的经验,所以我知道它与此有关,但我正在摸不着头脑。
reactjs - 集成测试节点模块中的提取调用
目标:调用一个调用 fetch 调用的函数,以验证它是否适用于我的后端 rest-api(基本上是端到端测试)。
项目:构建的节点模块可以导入到几个反应 Web 应用程序中。该模块仅包含 fetch 调用和最少的逻辑。它基本上是 URL 和设置的美化包装。旨在减少实现应用程序中使用的通用端点所需的工作。
设置:我有一个 docker compose 构建一个 docker 测试容器并拉入我的 rest-api docker 映像(构建在不同的系统中)。测试容器拉入打包的模块并使用依赖项安装它。然后它会在后端+后端所需的其他图像(数据库、登录系统等)旁边显示测试。
问题:如何实现测试来处理调用。
目前我已经尝试直接调用 fetch 方法。这适用于我的登录获取,但任何其他调用都无法发送 cookie。据我了解,我拥有的代码取决于 cookie 的浏览器。我已经尝试了几种解决方案来获取所说的 cookie,但我无法获取 node-fetch 以正确发送它。我最好的猜测是每个测试都在创建一个新的 cookie,但我缺乏完全调试此解决方案路径的知识。
我的发送解决方案路径是尝试使用 puppeteer 加载假页面,然后在页面中评估函数,例如: https ://github.com/puppeteer/puppeteer/issues/2579 如何在 page.evaluate 中使用导入的函数在 Puppeteer with Jest 中?
问题是测试一直无法加载所需的库或其他问题。
代码:
这是我试图测试的大部分电话。我提供的每个函数都围绕它提供 {url:"api/endpoint/path", method:"GET"}。有一些传递给更大的数据帖子。
我尝试过的测试示例:
javascript - 节点获取 API | text() 代表什么?(承诺问题)
谁能告诉我 text() 到底是做什么的?我看到人们这样使用它,而且它确实有效:
关键是,不使用 text() 我最终无法获取数据,而是以已解决的承诺结束
node.js - 通过 Express 的代理 API 请求返回待处理的 Promise 而不是响应
我目前正在尝试使用 Atlassian Jira rest API。为了不出现 CORS 错误,我采用了不从浏览器发送请求而是通过我的快速服务器代理它的推荐路线。
现在,当我这样做时,我在应用程序中收到的只是一个未决的承诺。我假设我有一次没有正确解决它,但我不知道在哪里。
API Handler 向代理发送请求:
Express 服务器上的 Jira 代理端点
处理响应和处理错误方法:
目标: 向代理发送发送请求的请求,并将代理的响应作为初始“testConction”方法的返回返回。
错误: 没有抛出错误,但在浏览器中收到的响应是待处理的承诺。
node.js - Node.js 在外部 API 上获取 403 访问被拒绝错误
我已经在 Heroku 上部署了我的 Node.js Koa API 应用程序。我正在调用 USAJOB.gov API,它可以在我的本地主机上运行。但是,在 Heroku 上,我收到此错误:
这是我的 Koa 路由器片段: