koa 是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。 使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套, 并极大地提升错误处理的效率。koa 不在内核方法中绑定任何中间件, 它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。它的特点是优雅、简洁、表达力强、自由度高。本身代码只有1000多行,所有功能都通过插件实现

  • Koa 依赖 node v7.6.0 以上版本

架设 HTTP 服务

1
2
3
4
5
6
const Koa = require('koa');
const app = new Koa();

app.listen(8088,()=>{
console.log('开启服务器成功!');
});

Context 对象

  • Koa Context 将 node 的 request 和 response 对象进行了封装
  • 表示一次对话的上下文(包括 HTTP 请求和 HTTP 回复)
  • 每个 请求都将创建一个 Context,并在中间件中作为接收器引用
  • 我们可以将ctx对象打印出来看看,可以看见 ctx 上面有request、response、app、originalUrl、req、res、socket对象
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    const Koa = require('koa');
    const Router = require('koa-router');
    const app = new Koa();
    let router = new Router();

    router.get('/',(ctx,next)=>{
    console.log(ctx);
    });

    app.use(router.routes());
    app.listen(8088,()=>{
    console.log('开启服务器成功!');
    });

    ------------------------- 输出如下 -------------------------------------
    { request:
    { method: 'GET',
    url: '/',
    header:
    { host: 'localhost:8088',
    connection: 'keep-alive',
    'cache-control': 'max-age=0',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
    accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'zh-CN,zh;q=0.9' } },
    response: { status: 404, message: 'Not Found', header: {} },
    app: { subdomainOffset: 2, proxy: false, env: 'development' },
    originalUrl: '/',
    req: '<original node req>',
    res: '<original node res>',
    socket: '<original node socket>' }