The koa documentation allows you to assign a stream to your response: (from https://koajs.com/#response)
ctx.response.body=
Set response body to one of the following:
- string written
- Buffer written
- Stream piped
- Object || Array json-stringified
- null no content response
ctx.body
is just a shortcut to ctx.response.body
So here are some examples how you could use it (plus standard koa body assignment)
Calling the server with
- localhost:8080/stream ... will respond with the data stream
- localhost:8080/file ... will respond with the file stream
- localhost:8080/ ... just sends back standard body
'use strict';
const koa = require('koa');
const fs = require('fs');
const app = new koa();
const readable = require('stream').Readable
const s = new readable;
// response
app.use(ctx => {
if (ctx.request.url === '/stream') {
// stream data
s.push('STREAM: Hello, World!');
s.push(null); // indicates end of the stream
ctx.body = s;
} else if (ctx.request.url === '/file') {
// stream file
const src = fs.createReadStream('./big.file');
ctx.response.set("content-type", "text/html");
ctx.body = src;
} else {
// normal KOA response
ctx.body = 'BODY: Hello, World!' ;
}
});
app.listen(8080);