web-dev-qa-db-ja.com

Koa2-応答ストリームに書き込む方法は?

Koa2を使用していて、応答ストリームにデータを書き込む方法がわからないため、Expressでは次のようになります。

res.write('some string');

ストリームをctx.bodyに割り当てることができることを理解していますが、node.jsストリームに慣れていないため、このストリームの作成方法がわかりません。

5
user3690467

Koaのドキュメントでは、応答にストリームを割り当てることができます(from https://koajs.com/#response

ctx.response.body =

応答本文を次のいずれかに設定します。

  • 書かれた文字列
  • 書き込まれたバッファ
  • パイプストリーム
  • オブジェクト|| json-stringified配列
  • nullコンテンツ応答なし

ctx.bodyctx.response.bodyへのショートカットです

だからここにあなたがそれをどのように使うことができるかのいくつかの例があります(そして標準のコアボディ割り当て)

-localhost:8080/stream ...でサーバーを呼び出すと、データストリームで応答します-localhost:8080/file ...ファイルストリームで応答します-localhost:8080/...

'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", "txt/html");
        ctx.body = src;
    } else {
        // normal KOA response
        ctx.body = 'BODY: Hello, World!' ;
    }
});

app.listen(8080);