• xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!


    koa response image

    koa.js

    v1.x generator *function

    v2.x Async/Await

    koajs/examples

    https://github.com/koajs/examples

    https://github.com/koajs/examples/blob/master/stream-file/app.js

    
    const Koa = require('koa');
    const fs = require('fs');
    const app = module.exports = new Koa();
    const path = require('path');
    const extname = path.extname;
    
    // try GET /app.js
    
    app.use(async function(ctx) {
      const fpath = path.join(__dirname, ctx.path);
      const fstat = await stat(fpath);
    
      if (fstat.isFile()) {
        ctx.type = extname(fpath);
        ctx.body = fs.createReadStream(fpath);
      }
    });
    
    if (!module.parent) app.listen(3000);
    
    /**
     * thunkify stat
     */
    
    function stat(file) {
      return new Promise(function(resolve, reject) {
        fs.stat(file, function(err, stat) {
          if (err) {
            reject(err);
          } else {
            resolve(stat);
          }
        });
      });
    }
    
    

    https://github.com/koajs/examples/tree/master/stream-server-side-events

    https://github.com/koajs/examples/tree/master/templates/

    demo

    https://stackoverflow.com/questions/51571054/koa2-how-to-write-to-response-stream

    
    '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);
    
    

    OK

    
    "use strict";
    
    /**
     *
     * @author xgqfrms
     * @license MIT
     * @copyright xgqfrms
     * @created 2020-02-22
     * @modified
     *
     * @description
     * @augments
     * @example
     * @link
     *
     */
    
    const log = console.log;
    
    const Koa = require('koa');
    const app = new Koa();
    
    const fs = require('fs');
    const path = require('path');
    // const img = require('../poster.png');
    
    // const readable = require('stream').Readable
    // const s = new readable;
    
    const img = fs.createReadStream('./poster.png');
    
    // logger
    app.use(async (ctx, next) => {
        await next();
        const rt = ctx.response.get('X-Response-Time');
        log(`${ctx.method} ${ctx.url} - ${rt}`);
    });
    
    // x-response-time
    app.use(async (ctx, next) => {
        const start = Date.now();
        await next();
        const ms = Date.now() - start;
        ctx.set('X-Response-Time', `${ms}ms`);
    });
    
    // response
    app.use(async ctx => {
        // node.js debugger
        // log(`ctx`, ctx);
        // log(`
    ctx.request =
    `, JSON.stringify(ctx.request, null, 4));
        // log(`
    ctx.response 
    `, JSON.stringify(ctx.response, null, 4));
        // ctx.body = 'Hello World';
        // ctx.body = img;
        ctx.response.set("content-type", "image/png");
        ctx.body = img;
        // response image
    });
    
    app.listen(3000);
    
    

    refs



    ©xgqfrms 2012-2020

    www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


  • 相关阅读:
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/12346960.html
Copyright © 2020-2023  润新知