Koa

717 阅读2分钟

Koa

  1. Koa是 Node.js 平台开发的Web开发框架,是 express 原班人马打造的。
  2. 在 Koa 里面,所有的操作都是基于中间件来使用的。

express 里面也有中间件,那么 Koa 里面的中间件和 express 里面的中间件有什么区别呢?

  • express 的中间件是基于 layer 层的模型
  • Koa 中的中间件事基于洋葱的模型

Koa 中间件的使用

  • Koa 的中间件 use 传递的是一个 async 函数
  1. 参数1:ctx 是 context 的简称,也叫上下文,ctx 里面包含了请求头(request)和响应头(response)。
  2. 参数2:next代表的下一个要执行的中间件
    const Koa = require('koa');
    const app = new Koa();

    app.use(async (ctx, next) => {
        console.log(ctx.request);
        next();
    });
    
    app.use(async (ctx, next) => {
        console.log('fn2');
    });

    app.listen(3000, function (error) {
        console.log(error);
        console.log('server is running at 3000!');
    });
  • 请求头(request)
    console.log(ctx.request);
    console.log(ctx.request.url);
    console.log(ctx.request.method);
    console.log(ctx.req.url);
    console.log(ctx.req.method);
    console.log(ctx.url);
    console.log(ctx.method);
  • 响应头(response)
    ctx.body = 'Hello World';
    ctx.response.body = 'Hello World';
  • next()
    如果一个服务器里面使用了多个中间件,要想下一个中间正常执行,就要在上一个中件
件里面添加一个next(),表示执行下一个中间件。如果没有添加next(),后面的中间件不会
执行。

ctx.request 和 ctx.req 的区别?

  • ctx.request 是 Koa 帮我们封装好的。
  • ctx.req 是原始的请求头。 ---> http.createServer( function(req,res){ } );

ctx.response 和 ctx.res 的区别?

  • ctx.response 是 Koa 帮我们封装好的。
  • ctx.res 是原始的响应头。 ---> http.createServer( function(req,res){ } );

响应头可以响应什么类型的数据

  • 对象类型 ---> 会自动转化为 json 格式
  • 对象数组 ---> 会自动转化为 json 格式
  • buffer ---> 会自动转化为纯文本的格式,如果要将它转化为HTML的格式
添加如下的一行代码,将格式自动转化为html格式的:
    ctx.set('Content-Type','text/html,chartset:utf-8');

Koa 还有一些缺陷

  • 无论我们访问哪一个IP地址,返回给我们的都是同一个内容,这是因为 Koa 本身是没有办法发送 getpost 请求的,这个时候就需要就需要借助第三方的包。
  • koa-router 可以提供 app.get、app.post、app.put 等操作。
  1. npm install koa-router / yarn add koa-router
  2. 导包跟引用
    const Router = require('router');
    const router = new Router();
    
    router.get('/' , async (ctx,next) => {
        
    } );
    
    app.use(router.routers()).use(router.allowedMethods());