node.js - 触发 GET 请求并获取 Node Stream

标签 node.js node-request

我正在尝试以 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,
});

我如何开火:

request('http://visual-recognition-demo.mybluemix.net/images/horses.jpg') 所以响应可以在 req

中使用

更新: Content-Length header 似乎在
http://visual-recognition-demo.mybluemix.net/images/horses.jpg回应
你只会得到 Transfer-Encoding: chunked

更多详情 here

最佳答案

看看this part的文档。你所描述的本质上是这个 block

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。如果您确实提供了回调,它会尝试将响应转换为字符串。使用 encoding:null 让它返回原始字节。
示例 -

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

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

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关于如何做到这一点。

这是一个 bluebird 的例子(使用 then 以迭代方式工作)

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 请求并获取 Node Stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29040797/

相关文章:

javascript - JWT 身份验证和授权

node.js - 在 NodeJS 中下载后立即使用 request 和 gm 模块调整图像大小

javascript - 使用 Node.Js 中的请求从 Google 搜索结果中抓取内容

javascript - 代理请求超过时间提供错误

json - 将 JSON 传递给 HTTP POST 请求

javascript - nodejs 比较 Unicode 文件名

node.js - 使用 Jasmine 测试 Nodejs 中的事件

node.js - 无法安装 NodeJs :/usr/bin/env: node: No such file or directory

node.js - Mongoose 种群如何运作

javascript - 将节点请求模块与 AWS Lambda 和 API Gateway 结合使用