pipe道可读stream使用superagent

我正在尝试创build一个multer中间件,通过superagent将stream媒体文件从客户端传送到第三方。

const superagent = require('superagent'); const multer = require('multer'); // my middleware function streamstorage(){ function StreamStorage(){} StreamStorage.prototype._handleFile = function(req, file, cb){ console.log(file.stream) // <-- is readable stream const post = superagent.post('www.some-other-host.com'); file.stream.pipe(file.stream); // need to call cb(null, {some: data}); but how // do i get/handle the response from this post request? } return new StreamStorage() } const streamMiddleware = { storage: streamstorage() } app.post('/someupload', streamMiddleware.single('rawimage'), function(req, res){ res.send('some token based on the superagent response') }); 

我认为这似乎工作,但我不知道如何处理来自superagent POST请求的响应,因为我需要返回从superagent请求收到的令牌。

我试过post.end(fn...)但显然endpipe 不能同时使用 。 我觉得我误解了pipe道的工作原理,或者我想要做的是实际的。

Superagent的.pipe()方法用于下载(从远程主机到本地应用程序的pipe道数据)。

看起来你需要在另一个方向上pipe道:从应用程序上传到远程服务器。 在superagent(自v2.1)没有办法,它需要一个不同的方法。

你有两个select:

最简单,效率较低的是:

告诉multer缓冲/保存文件,然后使用.attach()上传整个文件。

更难的是“手动”pipe道“文件”:

  1. 使用要上传的URL,方法和HTTP标头创build一个超级实例,
  2. 在传入的文件stream上监听data事件,并对每个数据块调用superagent的.write()方法。
  3. 在传入的文件stream上聆听end事件,并调用superagent的.end()方法读取服务器的响应。