What should I use instead of readableStream.push ('')

I am trying to implement a function ._readfor a readable stream, the problem occurs when ._readno data is called , the documentation says that I can push('')until there is more data, and I should only return falsewhen the stream will never have more data. https://nodejs.org/api/stream.html#stream_readable_read_size_1

But he also says that if I need it, then something is terribly wrong with my design. https://nodejs.org/api/stream.html#stream_stream_push

But I can not find an alternative to this.

code:

    var http = require('http');
    var https = require('https');
    var Readable = require('stream').Readable;
    var router = require('express').Router();
    var buffer = [];

    router.post('/', function(clientRequest, clientResponse) {
        var delayedMSStream = new Readable;
        delayedMSStream._read = function() {
            var a=buffer.shift();
            if(typeof a === 'undefined'){
                this.push('');
                return true;
            }
            else {
                this.push(a);
                if(a===null) {
                    return false;
                }
                return true;
            }
        };
        //I need to get a url from example.com
        https.request({hostname:'example.com'}, function(exampleResponse){
            data='';
            exampleResponse.on('data',function(chunk){data+=chunk});
            exampleResponse.on('end',function(){
                var MSRequestOptions = {hostname: data, method: 'POST'};
                var MSRequest = https.request(MSRequestOptions, function(MSResponse){
                    MSResponse.on('end', function () {
                            console.log("MSResponse.on(end)");//>>>
                    });//end MSResponse.on(end)
                }); //end MSRequest
                delayedMSStream.pipe(MSRequest);
            });
        });

        clientRequest.on('data', function (chunk) {
            buffer.push(chunk);
        });

        clientRequest.on('end', function () {//when done streaming audio
            buffer.push(null);
        }); 
    });//end router.post('/')

: POST- , URL- example.com, example.com URL-, .

?

+4
1

, , :

  • ,
  • URL-
  • URL- .

, , , . , .

:

let http = require('http');
let https = require('https');
let Readable = require('stream').Readable;
let router = require('express').Router();
let buffer = [];

/**
 * Gets some data from a remote host. Calls back when done.
 * We cannot pipe this directly into your stream chain as we need the complete data to get the end result.
 */
function getHostname(cb) {

  https.request({

    hostname: 'example.com'
  }, function(response) {

    let data = '';
    response.on('error', err => cb(err)); // shortened for brewity
    response.on('data', function(chunk) {

        data = data + chunk;
    });
    response.on('end', function() {

      // we're done here.
      cb(null, data.toString());
    });
  });
}

router.post('/', function(request, response) {

  // first let get that url.
  getHostname(function(err, hostname) {

    if (err) { return response.status(500).end(); } 

    // now make that other request which we can stream.
    https.request({

      hostname: hostname,
      method: 'POST'
    }, function(dataStream) {

        dataStream.pipe(response);
    });
  });
});

, , streams2, . node pre 0.10 "", "" .. node, . , , , .

+1

Source: https://habr.com/ru/post/1622147/


All Articles