node.js – 触发GET请求并获取节点Stream

我正在尝试发送formData,一个来自我使用request的图像的流

问题是formData请求后请求是激发的.
有什么方法可以管理图像请求识别吗?但是可以自由地向formData添加参数吗?

例如:

var req = request({
  method: 'POST',
  url: 'http://www.foo.bar/api/v1/tag/recognize',
  formData: {
    image_file: request('http://visual-recognition-demo.mybluemix.net/images/horses.jpg'),
    param2: 'value2'
  },
  json: true,
});

我如何开火:

请求( ‘http://visual-recognition-demo.mybluemix.net/images/horses.jpg’)

所以响应可以在req中使用

更新:似乎缺少Content-Length标头
http://visual-recognition-demo.mybluemix.net/images/horses.jpg回应
你只能获得Transfer-Encoding:chunked

更多细节here

最佳答案
看看this part的文档.你所描述的基本上是这个块

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

请注意文档

When doing so, content-type and content-length are preserved in the
PUT headers.

另请注意,如果您未指定回调,请求将始终返回Stream.如果确实提供了回调,它会尝试将响应转换为String.使用encoding:null使其返回原始字节.
示例 –

request({
   url: 'some_url', //your image
   encoding: null  //returns resp.body as bytes
}, callback..)

要将调用链接在一起(一个接一个地运行),您可以嵌套回调或使用promises.例如,在另一个请求完成后运行请求 –

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
      });
  }
});  

甚至更好,将请求回调代码转换为Promises. See a promise library like Bluebird关于如何做到这一点.

这是蓝鸟的一个例子(然后用于迭代时效)

var Promise = require("bluebird");
Promise.promisifyAll(require("request"));

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

转载注明原文:node.js – 触发GET请求并获取节点Stream - 代码日志