基础使用

const Koa = require('koa');
const app = new Koa();

app.use(async (ctx, next) => {
    const start = Date.now();
    await next();
    const ms = Date.now - start;
    console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
});

//response
app.use(ctx => {
    ctx.status = 200;
    ctx.set('Content-type', 'text/plain; charset=utf-8');
    ctx.body = 'Hello Koa';
});

app.listen(3000);

// 一些其他的方法
ctx.redirect('/home');
// 相当于
// res.status = 302;
// res.setHeader('Location', '/Home')

三个 API

  • use
app.use((ctx, next) => {})
  • listen
app.listen(3000);
  • callback
    该函数内部实现三个功能
  1. 使用 koa-compose 函数将 middleware 中间件数组转化为中间件 fn;
  2. 调用 app.createContext 函数。创建 context, request, response 对象,将 request 和 response 挂载在 context 上;把 req 和 res 挂载到三个对象上。
    例如: request 的原型对象上部分代码如下
get header(){
    return this.req.headers;
}

set header(val){
    this.req.headers = val;
}

我们现在就可以根据 ctx.request.header 获取 req 的 headers 了。
3. 执行 handleRequest 函数,本质是把组装好的 context 传入中间件 fn 执行。

Koa-router

const Router = require('koa-router');
const router = new Router();

router.get('/', (ctx, next) => {
    ctx.body = 'Hello World!';
})
      .post('/users', (ctx, next) => {
          // ...
      })
      .put('/users/:id', (ctx, next) => {})
      .del('/users/:id', (ctx, next) => {})
      .all('/users/:id', (ctx, next) => {});

app.use(router.routes());
app.use(router.allowedMethods());

koa-static

用于处理静态资源的 koa 中间件

const static = require('koa-static');
app.use(static(''public));

koa-body

处理请求的中间件,可以轻松获得请求的内容

const body = require('koa-body');
app.use(body({multipart: true}));
app.use((ctx) => {
    console.log(ctx.request.body);
})