ctx.req 原生request对象
ctx.res 原生response对象
ctx.request koa的request对象
ctx.response koa的response对象
ctx.throw()抛异常:
ctx.redirect()重定向
const Koa = require("koa");
const Router = require("koa-router");
const fs = require("promise-fs");
let server = new Koa();
let router = new Router();
server.listen(8000);
// 判断登录
let login = false;
router.get('/', async ctx=> {
if(!login) {
ctx.redirect('/login')
}else{
ctx.body="你已经入购物车页面"
}
});
// 重定向到登录页的时候
router.get('/login', async ctx=> {
let buffer = await fs.readFile('./public/login.html');
ctx.body = buffer.toString();
})
// 登录页提交数据后
router.post('/login', async ctx=> {
login = true;
ctx.redirect('/')
})
server.use(router.routes())
下载附件:
const Koa = require("koa");
const Router = require("koa-router");
const fs = require("promise-fs");
let server = new Koa();
let router = new Router();
server.listen(8000);
router.get('/download', async ctx=>{
ctx.attachment('数据统计.xlsx'); // 下载附件的名字和格式
ctx.body=await fs.readFile('./data/1.txt')
})
server.use(router.routes())
推荐使用:
fs.createReadStream方法:读一点,发一点,对性能比较友好。
fs.readFile:读整个文件,发整个文件,占用内存和读磁盘,之后又占用网络,一个忙死,一个闲死,遇上大文件等待长。
const Koa = require("koa");
const Router = require("koa-router");
const fs = require("promise-fs");
// const MemoryStream = require("memorystream");
let server = new Koa();
let router = new Router();
server.listen(8000);
router.get('/download', async ctx=>{
ctx.attachment('文件.doc');
// ctx.body = await fs.readFile('./data/1.txt');
ctx.body = await fs.createReadStream('./data/1.txt');
});
server.use(router.routes())
**内存流memorystream:**动态生成内容并下载,可以用于拼接数据。在内存中构建流。
npm i memorystream -D
案例:
const Koa = require("koa");
const Router = require("koa-router");
const fs = require("promise-fs");
const MemoryStream = require("memorystream");
let server = new Koa();
let router = new Router();
server.listen(8000);
router.get('/download', async ctx=>{
let strem = new MemoryStream();
ctx.attachment('20200111.txt'); // 下载的名字和格式
ctx.body=strem;
strem.write("我是日志文件"); // 内容
strem.write("现在是2019年12月22日");
strem.end(); // 结束strem
})
server.use(router.routes())
头操作:ctx.headers
在服务端获取客户端头的方法:格式是JSON。
const Koa = require("koa");
const Router = require("koa-router");
let server = new Koa();
let router = new Router();
server.listen(8000);
router.get('/', async ctx=>{
console.log(ctx.headers); // 获取全部头 是json格式
console.log(ctx.headers['host']); // 指定获取host地址
console.log(ctx.get('host')); // 指定获取host地址
ctx.body = "welcome";
});
server.use(router.routes())
const Koa = require("koa");
const Router = require("koa-router");
let server = new Koa();
let router = new Router();
server.listen(8000);
router.get('/', async ctx=>{
ctx.set('name', 'enoch'); // 自定义头
ctx.set('age', '18');
ctx.set('set-cookie', 'type=12'); // 官方头
ctx.body = "welcome";
});
server.use(router.routes())