UNPKG

request-multi-streams

Version:

Make multiple http requests. Receive response progress indicators, pipe streams.

84 lines (73 loc) 2.13 kB
'use strict'; const httpMultiStreams = require('../'); const chalk = require('chalk'); const fs = require('fs'); const req1 = { options: { url: 'https://cdn.pixabay.com/photo/2014/03/27/21/10/waterfall-299685_1280.jpg', }, numberOfRequests: 10, // Not the same as retries }; const req2 = { options: { url: 'http://www.textfiles.com/fun/acronym.txt', }, progressOptions: { throttle: 0, // Throttle the progress event to 2000ms, defaults to 1000ms delay: 10, // Only start to emit after 1000ms delay, defaults to 0ms // lengthHeader: 'x-transfer-length' // Length header to use, defaults to content-length }, numberOfRequests: 10, // Not the same as retries }; const reqs = [req1, req2]; function getStreams() { const emitters = httpMultiStreams.streams(reqs); if (emitters) { for (var name in emitters) { //listen the events emitters[name].on('progress', data => { console.log( chalk.yellow( `Request ${data.reqNumber} for ${data.args.options.url}: ${Number( (data.progress.percent * 100).toFixed(1) )}% complete` ) ); }); emitters[name].on('response', data => { console.log( chalk.yellow( `Request ${data.reqNumber} for ${ data.args.options.url }: got a response` ) ); if (name === 'http://www.textfiles.com/fun/acronym.txt') { data.stream.pipe( fs.createWriteStream(`${__dirname}/${data.reqNumber}`) ); } }); emitters[name].on('error', error => { console.log( chalk.red( `Request ${error.reqNumber} for ${ error.args.options.url }: finished on error ${error.error}` ) ); }); emitters[name].on('end', end => { console.log( chalk.green( `Request ${end.reqNumber} for ${ end.args.options.url }: finished with sucess` ) ); }); } } } module.exports = getStreams();