请求流Get+在Node.js中编辑后的JSON主体

Request Stream Get + Post edited JSON body in Node.js

本文关键字:编辑 JSON 主体 js Get+ Node 请求      更新时间:2023-09-26

我是Node.js的新手,正在做一个项目,我想使用Request从一个端点流式传输到另一个端点。我的目标是使用Request获取并发布使用管道流编辑的JSON正文。我知道这样做时,内容类型和内容长度将保留在POST标头中。然而,我想从第一个url将.forEach应用于正文中的所有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'));

我是不是错过了什么?有更好的方法吗?

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

 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解析器模块,这可能适用于您的用例,也可能不适用于您。