认识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())

客户端发送请求:
认识ctx对象、ctx的方法_第1张图片
服务端获取的情况:
认识ctx对象、ctx的方法_第2张图片
给客户端设置头部:

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())

看一下客户端:已经设置上了,可以设置自定义头,也可以设置官方头。
认识ctx对象、ctx的方法_第3张图片
认识ctx对象、ctx的方法_第4张图片

你可能感兴趣的:(Node.js)