认识ctx对象、ctx的方法

ctx.req 原生request对象
ctx.res 原生response对象
ctx.request koa的request对象
ctx.response koa的response对象

ctx.throw()抛异常:
ctx.redirect()重定向

  • 301永久重定向
  • 302临时重定向
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())

看一下客户端:已经设置上了,可以设置自定义头,也可以设置官方头。
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值