使用npm request包,响应发出后无法执行pipe操作问题求助
解决request包延迟pipe无数据的问题
嘿,我来帮你搞定这个问题!你遇到的情况其实是request模块的流特性导致的——当你用request()创建请求流时,它会立刻发起HTTP请求并开始接收响应数据,而你等5秒后再执行pipe,这时候响应数据早就已经被处理完(或者说被丢弃了),自然写不出内容到文件里。
给你两种靠谱的解决办法:
方法一:先暂停流,延迟后恢复并pipe
先把请求流暂停,阻止数据被提前消耗,等延迟时间到了再恢复流并执行pipe:
var fs = require('fs'), request = require('request'); var readStream = request({ url: 'https://www.google.com' }); readStream.pause(); // 暂停流,不让数据被提前处理 setTimeout(function() { readStream.pipe(fs.createWriteStream('test.js')); readStream.resume(); // 恢复流,开始传输数据到文件 }, 5000);
方法二:延迟创建请求流(更直接)
干脆等到需要pipe的时候再发起请求,这样数据从一开始就会被导向文件,不会有丢失的问题:
var fs = require('fs'), request = require('request'); setTimeout(function() { // 5秒后才创建请求并立刻pipe var readStream = request({ url: 'https://www.google.com' }); readStream.pipe(fs.createWriteStream('test.js')); }, 5000);
另外提个小建议:request模块现在已经被标记为**废弃(deprecated)**了,如果是新项目的话,建议换成axios或者node-fetch这类维护更活跃的HTTP库,避免后续遇到更多兼容性问题~
内容的提问来源于stack exchange,提问作者Selvakumar
相关产品推荐
相关产品推荐

