NodeJs将文件从请求发送到文件系统而不是内存

我有一个奇怪的问题。 我正在使用NodeJ中的文件下载请求,每次下载较大的文件(> 250MB)时,都会将其下载到内存中,而不是直接传输到文件系统。 也许我做错了什么,但我做了一个testing用例,文件仍然没有stream。

var request = require('request'); var fs = require('fs'); var writable = fs.createWriteStream("1GB.zip"); var stream = request.get({ uri: "http://ipv4.download.thinkbroadband.com/1GB.zip", encoding: null }, function(error, response, body) { console.log("code:", response.statusCode); if (response.statusCode >= 500) { log.err(response.statusCode, " Servererror", file.url); } }).pipe(writable); 

在这个testing用例中,我正在下载一个1GB的样本文件,如果你用taskmanager观察节点的进程,它会在下载文件时增长到> 1GB。 我希望我的Node应用程序使用不超过200MB的RAM

问题是你正在传递一个callback,这隐式地启用缓冲内部request因为callback的参数之一是整个响应的body

如果您想知道response何时可用,只需监听response事件:

 var request = require('request'); var fs = require('fs'); var writable = fs.createWriteStream("1GB.zip"); var stream = request.get({ uri: "http://ipv4.download.thinkbroadband.com/1GB.zip", encoding: null }).on('response', function(response) { console.log("code:", response.statusCode); if (response.statusCode >= 500) { log.err(response.statusCode, " Servererror", file.url); } }).pipe(writable);