Node.js request模块链式调用pipe()时添加headers报错如何解决?
你当前的实现思路存在偏差,问题核心在于对request库的API返回值规则、链式调用逻辑理解有误,具体原因如下:
- 链式调用的前提是每一步方法都返回你要后续操作的目标对象(此处为
request.get返回的请求流对象),setHeader方法的返回值为void,并不会返回原请求流对象,因此调用setHeader后无法继续链式调用pipe方法,触发第一个报错。 pipe方法的返回值是目标写入流(此处就是process.stdout对应的WriteStream实例),该对象本身不存在请求流才有的setHeader方法,因此调换顺序后会触发第二个报错。- 额外的用法错误:
setHeader原生设计为单次设置单个请求头,接收(header名, header值)两个参数,你直接传入完整headers对象的用法本身也不符合API规范。
正确实现方案
最推荐的用法是直接在request.get的配置参数中传入headers,无需后续单独设置,可正常链式调用pipe:
request .get({ url: url, headers: headers }) .pipe(process.stdout)
如果确实需要在请求流创建后再批量设置headers,可先保存请求流实例再操作,避免跨方法链式调用:
const reqStream = request.get(url) // 批量写入headers Object.entries(headers).forEach(([key, value]) => { reqStream.setHeader(key, value) }) reqStream.pipe(process.stdout)
内容的提问来源于stack exchange,提问作者user2875404
相关产品推荐
相关产品推荐

