【问题标题】:Request Stream Get + Post edited JSON body in Node.js在 Node.js 中请求流获取 + 发布编辑的 JSON 正文
【发布时间】:2016-01-05 03:23:01
【问题描述】:

我是 Node.js 的新手,正在从事一个项目,我想使用 Request 从一个端点流式传输到另一个端点。我的目标是使用 Request 通过管道流获取和发布经过编辑的 JSON 正文。我知道这样做时,内容类型和内容长度将保留在 POST 标头中。但是,我想将 .forEach 从第一个 url 应用于正文中的所有 JSON 对象,并将它们发布到第二个 url。

我不确定正确的格式,希望能得到澄清。

我知道基本语法是这样的:

request.get('URL').pipe(request.post('URL'));

到目前为止,我最好的猜测是这样的:

request('FIRST_URL', function (error, response, body) {
  body = JSON.parse(body);
  body.forEach( function(arg) {
      //return edited body
  });
}).pipe(request.post('SECOND_URL'));

我错过了什么吗?有没有更好的方法来做到这一点?

【问题讨论】:

    标签: javascript json node.js xmlhttprequest


    【解决方案1】:

    您可以编写自己的转换流。例如:

     var Transform = require('stream').Transform;
     var inherits = require('util').inherits;
    
     function JSONTransform() {
       Transform.call(this);
       this._bufffer = '';
     }
     inherits(JSONTransform, Transform);
     JSONTransform.prototype._transform = function(chunk, enc, cb) {
       this._buffer += chunk;
       cb();
     });
     JSONTransform.prototype._flush = function(cb) {
       try {
         var result = JSON.parse(this._buffer);
         this._buffer = null;
    
         // Do whatever transformations
         // ...
    
         this.push(JSON.stringify(result));
         cb();
       } catch (ex) {
         cb(ex);
       }
     });
    
     // Then just pipe
     request.get('FIRST_URL')
            .pipe(new JSONTransform())
            .pipe(request.post('SECOND_URL'));
    

    另一个可能值得考虑的稍微不同的解决方案是使用第三方流式 JSON 解析器模块,它可能适用于您的用例,也可能不适用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 2017-02-12
      • 2011-05-08
      相关资源
      最近更新 更多