2016-01-04 3 views
0

Я новичок в Node.js и работаю над проектом, и я бы хотел использовать запрос для потоковой передачи с одной конечной точки на другую. Моя цель - использовать Request для получения и публикации отредактированного тела JSON с использованием потока каналов. Я знаю, что при этом контент-тип и длина контента будут сохранены в заголовках POST. Тем не менее, я хотел бы применить .forEach ко всем объектам JSON в теле от первого URL-адреса и отправить их во второй URL-адрес.Request Stream Get + Post отредактировал тело JSON в Node.js

Я не уверен в правильном формате, и я был бы признателен за некоторые разъяснения.

Я знаю, что базовый синтаксис таков:

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

Я пропускаю что-то? Есть лучший способ сделать это?

ответ

0

Вы можете написать собственный поток преобразования. Например:

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, который может или не может работать для вашего использования.

Смежные вопросы