Node.js 激发GET请求并获取节点流

Node.js 激发GET请求并获取节点流,node.js,node-request,Node.js,Node Request,我试图以formData的形式发送,这是一个来自我使用的图像的流 问题是请求是在formData请求之后触发的。 我有没有办法通过管道将图像请求识别出来?但是有了向表单数据添加参数的自由 e、 g: 我如何开火: 请求('http://visual-recognition-demo.mybluemix.net/images/horses.jpg') 因此,可以在req 更新:在 响应 而您只得到传输编码:分块 更多详细信息请查看文档。你所描述的基本上就是这个街区 request.get('ht

我试图以
formData
的形式发送,这是一个来自我使用的图像的流

问题是请求是在
formData
请求之后触发的。 我有没有办法通过管道将图像请求识别出来?但是有了向
表单数据添加参数的自由

e、 g:

我如何开火:

请求('http://visual-recognition-demo.mybluemix.net/images/horses.jpg')
因此,可以在
req

更新:
响应
而您只得到
传输编码:分块

更多详细信息请查看文档。你所描述的基本上就是这个街区

request.get('http://google.com/img.png').pipe(request.put('some_url'));  
注意文档

执行此操作时,内容类型和内容长度将保留在 放置标题

另外请注意,如果您不指定回调,请求将始终返回流。如果您确实提供了回调,它会尝试将响应转换为字符串。使用
编码:null
使其返回原始字节。
示例-

request({
   url: 'some_url', //your image
   encoding: null  //returns resp.body as bytes
}, callback..)
要将调用链接在一起(一个接一个地运行),可以嵌套回调或使用承诺。例如,要在另一个请求完成后运行请求,请执行以下操作-

var request = require('request');

//1st
request('first_url', function (error, response, body) {
  if (!error && response.statusCode == 200) {

      //2nd
      request('other_url', function (error, response, body) {   
         //process resp
      });
  }
});  
或者更好的是,将请求回调代码转换为承诺。关于如何做到这一点

下面是bluebird的一个示例(使用then以迭代方式工作)


我不确定
请求
库是否允许您通过管道执行此操作,但您只需使用回调函数,返回原始请求的正文。我认为这应该在请求库中处理。当您没有在示例和说明的第一个响应中指定
内容长度时,就会发生这种情况。如果您看一下服务实现。您认为我如何实施您的解决方案?我想向用户隐藏链接调用的问题。他们应该使用我在这个问题上使用的代码片段。如果您希望用户能够从ajax请求(比如请求库或其他什么)导入二进制对象,则需要重构如何使用params的实际实现逻辑。您还应该(我的建议)在文档中非常明确地使用管道输入资源。只要浏览一下您的库,我就永远不会期望能够使用异步响应作为参数(无论它是否为原始字节),基本上我只是提供了一个如何链接承诺(使用字节或文本响应)的答案,以便您可以自己实现。上面的回答解释了使用请求库的过程。但理想情况下,我认为您不允许将响应作为参数输入;或者,如果您这样做了,请更新文档以非常清楚地显示该选项http://visual-recognition-demo.mybluemix.net/images/horses.jpg“,encoding:null})
谢谢您的帮助@justin maat!你是真正的MVP!
var request = require('request');

//1st
request('first_url', function (error, response, body) {
  if (!error && response.statusCode == 200) {

      //2nd
      request('other_url', function (error, response, body) {   
         //process resp
      });
  }
});  
var Promise = require("bluebird");
Promise.promisifyAll(require("request"));

request.getAsync('some_url').then(function(resp) {
   request.getAsync('some_other_url').then(..processing code..);
});