问题标签 [node-request]
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 - NodeJS 有时会因为在流式传输/管道文件时内存不足而被杀死
问题
我有一个带有请求模块的 NodeJS 服务器。我使用请求 pipe()
来提供文件。
有时,应用程序抛出异常,所有下载都取消,我必须重新启动应用程序:
内存不足:杀死进程9342(nodejs)得分793或牺牲孩子
杀死进程9342(nodejs)total-vm:1333552kB,anon-rss:410648kB,file-rss:0kB
我编写了另一个脚本,它在意外结束时自动重启服务器(使用 childprocess 和 fork),有时会引发此错误:
致命错误:CALL_AND_RETRY_2 分配失败 - 进程内存不足
服务器数据
内存:500MB(我知道这个不多,但很便宜)
Ubuntu 12.04.5 LTS
NodeJS 版本:v0.10.36
假设
- 并行下载过多
- 与 RAM 相关的管道有问题
关于1:
当有人下载一个大文件时,它的一部分会加载到RAM中(我对此一无所知,一次说20MB,如果我错了,请纠正我)。当 400MB 可用并且以相同的下载速度进行 20 次当前下载时,服务器崩溃,因为他不能一次在 RAM 中加载超过 400MB。
关于 2:
除了pipe()
我使用以下代码来跟踪当前和取消的下载:
pipe()
没有正确关闭,并且它使用的 RAM 没有被清除。
问题
如果我的任何假设都是正确的,我该如何解决?如果不是,那可能是什么原因,或者更确切地说可能是什么原因(它是 NodeJS/请求模块/我的代码是错误还是错误,有没有更好的方法)?
完整代码
vimeo-api - Vimeo 进度请求返回“options.uri 是必需参数”
使用 Vimeo 的 API 完成 PUT 上传时遇到问题。上传进度调用返回:“错误:options.uri 是必需的参数。”
请注意,一切似乎都可以正确上传;在存在错误的情况下,我只是对成功持怀疑态度。
相关代码(Node.js)如下:
node.js - NodeJS、Express 和路由与外部请求
所以我目前正在构建一个用于学习的小型个人应用程序,我有一个场景,我要使用其他第三方的 API,但有几个用于 1 个对象。例如,我有 1 个要呈现的仪表板,我想对不同的地方进行不同的调用,并生成一个包含三个请求响应的数据对象。
例如,目前我有一些(类似于)下面的东西,它发出请求并返回该数据,以及来自 find 方法和当前用户会话的其他数据。效果很好。
但现在我想提出超过 1 个请求......所以我不确定如何去做以及最佳实践?
下面的感觉就像它不会工作和混乱:
任何人都可以对此有所了解吗?
node.js - 触发 GET 请求并获取节点 Stream
我正在尝试从我使用请求formData
获得的图像中发送一个流
问题是请求在请求之后被触发formData
。有什么办法可以通过管道识别图像请求吗?但是可以自由地向formData
?
例如:
如何开火:
request('http://visual-recognition-demo.mybluemix.net/images/horses.jpg')
所以响应可以用于req
更新:似乎http://visual-recognition-demo.mybluemix.net/images/horses.jpg响应Content-Length
中缺少标题
,您只会得到
Transfer-Encoding: chunked
更多细节在这里
javascript - 使用nodejs请求模块返回未定义的地理编码功能
基本上我有这个代码。我想将回调中的请求结果保存到一个变量中,然后我可以返回到程序的另一部分。
console.log(geocodeLoc('Hoxton')) 的结果在执行 console.log(result) 之前返回。
真正令人沮丧的是,console.log(result) 的结果正是我想要的。
这是程序的输出
我想要的只是 geocodeLoc 返回结果。我对NodeJS有点陌生,非常感谢任何帮助
node.js - Node.js 在本地范围内保留一个全局变量的副本
我有一个 Node.js 应用程序,它使用请求库来获取多个 URL。代码是这样的:
为简单起见,假设docs
包含 [URL1, URL2, URL3, ...] 之类的 URL。在第一次迭代中,URL = URL1 并且请求被发送到该 URL。在第二次迭代中,向 URL2 发送一个请求,依此类推。但是,在循环结束时,URL = URLn。在事件完成函数中,当我记录 URL 时,我总是得到 URLn。但是,我需要能够获取 [URL1, URL2, URL3, ...] 的相应 URL。
任何想法,我如何维护 URL 的本地副本,当全局 URL 发生更改时该事件保持不变?
这一定很容易,但我无法弄清楚。
javascript - 使用请求模块下载文件并将结果传递给流星和 node.js 中的响应
我想下载文件而不保存在磁盘上并将文件内容传递给响应。真的我想将文件作为流获取,然后将其传递给响应,客户端可以下载文件。例如使用下面的伪代码(使用iron-router、meteor、request):
这个怎么做?
传递文件以即时响应而不下载到磁盘上的真正解决方案是什么?
reactjs - 尝试从 componentWillMount 中异步调用的返回中设置状态时未定义文档
我在我的组件的 componentWillMount 调用中获取我的数据[实际上它在一个 mixin 中,但同样的想法]。ajax 调用返回后,我尝试 setState,但收到未定义文档的错误。
我不知道如何解决这个问题。有什么要等的吗?我应该在其中执行 setState 的承诺或回调?
这就是我想要做的:
mysql - nodejs 运行时在压力下测试时停止响应
我基本上是通过带有 mocha 的请求模块检查所有路线。
https://www.npmjs.com/package/request
我正在做压力测试,通过并排打开两个控制台窗口并同时运行它们。大多数时候测试都是成功的,但是当测试失败而没有超时错误时,就会有一个瞬间,并且从邮递员那里我有这个停止响应的特定路线。
它大约发生 7 次,我想知道我能做些什么来解决这个问题。
编辑: 增加到 4 个同时运行测试的控制台窗口,它们运行良好几次,但随后开始超时。
甚至 app.get、app.post 等路由上都没有控制台输出。
有什么建议么?
编辑
根据测试中的建议捕获了一些请求错误。
上述错误对应的代码是
编辑 2 使用控制台语句进一步深入挖掘,发现未调用 mysql 连接回调。附上截图并注意到一些连接限制,是因为这个吗?我正在使用连接池。
日志说强制关闭线程。
可能的答案:
这个线程帮助解决了这个问题。 https://github.com/felixge/node-mysql/issues/405
我设置waitForConnections: false
然后开始看到错误->
所以在我看来,系统正在等待连接,但测试运行器没有等待并最终出现超时错误。
似乎对最大连接数也有一些限制,尽管我在每次查询后都调用了连接释放,但不确定这在生产系统上是如何工作的?我们有限制吗?