@lxfriday/nodejs-file-downloader
Version:
A file downloader for NodeJs
210 lines (158 loc) • 4.81 kB
JavaScript
// console.log('env from root',process.env.NODE_ENV)
const express = require('express');
// const http = require('http');
const fs = require('fs');
const { Readable } = require('stream');
const port = '3002';
const app = express();
// debugger
app.get('/cancelWhileStream', (req, res) => {
// console.log('incoming request!')
// res.send('Hello World!')
const read = fs.createReadStream('./fixtures/Desert.jpg',{highWaterMark:2000});
// read.pipe(res);
const modifiedStream = Readable.from((async function* () {
// await timeout(100)
// yield 'yoyo'
// await timeout(100)
// counter++
// if (counter === 4) {
for await (const chunk of read) {
await timeout(1000)
yield chunk;
}
// } else {
// throw new Error('LOL');
// }
})());
modifiedStream.pipe(res);
})
app.get('/cancelBeforeStream', async (req, res) => {
// console.log('incoming request!')
// res.send('Hello World!')
await timeout(3000)
const read = fs.createReadStream('./fixtures/Desert.jpg');
// read.pipe(res);
const modifiedStream = Readable.from((async function* () {
// await timeout(100)
// yield 'yoyo'
// await timeout(100)
// counter++
// if (counter === 4) {
for await (const chunk of read) {
// await timeout(1000)
yield chunk;
}
// } else {
// throw new Error('LOL');
// }
})());
modifiedStream.pipe(res);
})
app.get('/timeoutDuringStream', (req, res) => {
// console.log('incoming request!')
// res.send('Hello World!')
const read = fs.createReadStream('./fixtures/Koala.jpg',{highWaterMark:2000});
// read.pipe(res);
const modifiedStream = Readable.from((async function* () {
// await timeout(100)
// yield 'yoyo'
// await timeout(100)
// counter++
let counter = 0;
// if (counter === 4) {
for await (const chunk of read) {
// counter++
// console.log(counter);
// yield chunk
// console.log('streaming')
if (counter === 0) {
// console.log(chunk)
// console.log('counter',counter)
counter++
yield chunk;
} else {
// console.log('before timeout')
await timeout(2000)
yield chunk;
}
}
// } else {
// throw new Error('LOL');
// }
})());
modifiedStream.pipe(res);
})
app.get('/timeoutBeforeResponse', async(req, res) => {
// console.log('incoming request!')
// res.send('Hello World!')
const read = fs.createReadStream('./fixtures/Koala.jpg',{highWaterMark:2000});
// read.pipe(res);
await timeout(5000)
const modifiedStream = Readable.from((async function* () {
for await (const chunk of read) {
yield chunk
}
})());
modifiedStream.pipe(res);
})
app.get('/koala',async(req,res)=>{
const read = fs.createReadStream('./fixtures/Koala.jpg',{highWaterMark:2000});
const modifiedStream = Readable.from((async function* () {
for await (const chunk of read) {
yield chunk
}
})());
modifiedStream.pipe(res);
})
const server = app.listen(port, () => {
console.log(port)
})
function timeout(mil) {
return new Promise((res) => {
setTimeout(() => {
res();
}, mil)
})
}
module.exports = {
app,
server
}
// async function* sourceData() {
// yield 1;
// yield 2;
// yield 3;
// }
// async function* filter(source, predicate) {
// for await (const item of source) {
// if (await predicate(item)) {
// yield item;
// }
// }
// }
// async function* map(source, mapper) {
// for await (const item of source) {
// yield await mapper(item);
// }
// }
// let iter = sourceData();
// iter = filter(iter, async val => await checkNumIsValidViaExternalService(val));
// iter = map(iter, val => val.toFixed(2));
// iter = map(iter, async val => {
// await new Promise(resolve => setTimeout(resolve, 100));
// return val;
// });
// const finalIter = sourceData()
// .filter(...)
// .map(...)
// .map(...)
// const finalIter = pipe(
// sourceData(),
// filter(...),
// map(...),
// map(...)
// );
// for await (const item of iter) {
// console.log(item);
// }