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(`\nctx.request =\n`, JSON.stringify(ctx.request, null, 4));
// log(`\nctx.response \n`, 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 发布文章使用:只允许注册用户才可以访问!


最新文章

  1. Junit的使用
  2. 重载Python FTP_TLS 实现Implicit FTP Over TLS方式下载文件
  3. D3(Data-Driven-Document)中的一些细节
  4. IOS图像拉伸解决方案
  5. mysql控制台命令
  6. Codeforces Gym 100803C Shopping 贪心
  7. eclipse添加hadoop开发插件
  8. vc++6.0修改字体
  9. 201521123077 《Java程序设计》第2周学习总结
  10. Redis4.0 Cluster — Centos7
  11. TP5 常用-方法技巧
  12. OpenCL异构计算资料收集
  13. jQuery的siblings方法
  14. webpack4之踩坑总结
  15. 集合框架之map
  16. Consul 域名服务
  17. 关闭Android ActionBar
  18. bat 脚本处理windows 文件
  19. zabbix系列(四)Zabbix3.0.4添加对Nginx服务的监控
  20. Oracle之表的相关操作

热门文章

  1. python join()方法的使用,可以应用到tcp压测发送指定数据长度的应用
  2. ts中提示“绑定元素“routes”隐式具有“any”类型”
  3. hadoop知识点总结(一)hadoop架构以及mapreduce工作机制
  4. YOLOv1论文解读
  5. MongoDB:原来我如此简单
  6. Hyperbase数据迁移
  7. MapReduce统计每个用户的使用总流量
  8. 2019牛客国庆集训派对day2
  9. zjnu1725 COCI (类似二维树状数组模拟)
  10. Codeforces Round #582 (Div. 3) F. Unstable String Sort