十、Koa框架

148 阅读2分钟

认识Koa

  • 前面我们已经学习了express,另外一个非常流行的Node Web服务器框架就是Koa。
  • Koa官方的介绍:
    • koa:next generation web framework for node.js;
    • koa:node.js的下一代web框架;
  • 事实上,koa是express同一个团队开发的一个新的Web框架:
    • 目前团队的核心开发者TJ的主要精力也在维护Koa,express已经交给团队维护了;
    • Koa旨在为Web应用程序和API提供更小、更丰富和更强大的能力;
    • 相对于express具有更强的异步处理能力(后续我们再对比);
    • Koa的核心代码只有1600+行,是一个更加轻量级的框架,我们可以根据需要安装和使用中间件;

Koa初体验

  • koa注册的中间件提供了两个参数:

  • ctx:上下文(Context)对象;

    • koa并没有像express一样,将req和res分开,而是将它们作为 ctx的属性;
    • ctx代表依次请求的上下文对象;
    • ctx.request:获取请求对象;
    • ctx.response:获取响应对象;
  • next:本质上是一个dispatch,类似于之前的next;

    image.png

Koa中间件

  • koa通过创建的app对象,注册中间件只能通过use方法:
    • Koa并没有提供methods的方式来注册中间件;
    • 也没有提供path中间件来匹配路径;
  • 但是真实开发中我们如何将路径和method分离呢?
    • 方式一:根据request自己来判断;

    • 方式二:使用第三方路由中间件;

      image.png

路由的使用

  • koa官方并没有给我们提供路由的库,我们可以选择第三方 库:koa-router

    npm install koa-router

  • 我们可以先封装一个 user.router.js 的文件:

  • 在app中将router.routes()注册为中间件:

  • 注意:allowedMethods用于判断某一个method是否支持:

    • 如果我们请求 get,那么是正常的请求,因为我们有实 现get;
    • 如果我们请求 put、delete、patch,那么就自动报错: Method Not Allowed,状态码:405;
    • 如果我们请求 link、copy、lock,那么就自动报错: Not Implemented,状态码:501;

    image.png

参数解析:params - query

参数解析:json

  • 请求地址:http://localhost:8000/login

  • body是json格式:

    image.png

  • 获取json数据:

    • 安装依赖: npm install koa-bodyparser;

    • 使用 koa-bodyparser的中间件;

      image.png

  • body是x-www-form-urlencoded格式(同上)

参数解析:form-data

  • 请求地址:http://localhost:8000/login
    • body是form-data格式
  • 解析body中的数据,我们需要使用multer
    • 安装依赖:npm install koa-multer;

    • 使用 multer中间件;

      image.png

静态服务器

  • koa并没有内置部署相关的功能,所以我们需要使用第三方库: npm install koa-static

  • 部署的过程类似于express:

    image.png

错误处理

image.png