Koa
koa注册的中间件提供了两个参数:
ctx:上下文(Context)对象;
koa并没有像express一样,将req和res分开,而是将它们作为
ctx的属性;
ctx代表依次请求的上下文对象;
ctx.request:获取请求对象;
ctx.response:获取响应对象;
◼ next:本质上是一个dispatch,类似于之前的next; 后续我们学习Koa的源码,来看一下它是一个怎么样的函数;
Koa中间件
koa通过创建的app对象,注册中间件只能通过use方法:
Koa并没有提供methods的方式来注册中间件;
也没有提供path中间件来匹配路径;
◼ 但是真实开发中我们如何将路径和method分离呢?
方式一:根据request自己来判断;
方式二:使用第三方路由中间件;
路由的使用
◼ 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;
参数解析:params - query
获取params:
获取query:
参数解析:json
body是json格式:
获取json数据:
安装依赖: npm install koa-bodyparser;
使用 koa-bodyparser的中间件;
参数解析:x-www-form-urlencoded
body是x-www-form-urlencoded格式:
获取json数据:(和json是一致的)
安装依赖: npm install koa-bodyparser;
使用 koa-bodyparser的中间件
参数解析:form-data
body是form-data格式
解析body中的数据,我们需要使用multer
安装依赖:npm install koa-multer;
使用 multer中间件;
M ulter上传文件
数据的响应
输出结果:body将响应主体设置为以下之一:
string :字符串数据
Buffer :Buffer数据
Stream :流数据
Object|| Array:对象或者数组
null :不输出任何内容
如果response.status尚未设置,Koa会自动将状态设置为200或204。
请求状态:status
静态服务器
koa并没有内置部署相关的功能,所以我们需要使用第三方库:
npm install koa-static
◼ 部署的过程类似于express:
错误处理
和express对比
◼ 在学习了两个框架之后,我们应该已经可以发现koa和express的区别:
◼ 从架构设计上来说:
◼ express是完整和强大的,其中帮助我们内置了非常多好用的功能;
◼ koa是简洁和*的,它只包含最核心的功能,并不会对我们使用其他中间件进行任何的限制。
甚至是在app中连最基本的get、post都没有给我们提供;
我们需要通过自己或者路由来判断请求方式或者其他功能;
◼ 因为express和koa框架他们的核心其实都是中间件:
但是他们的中间件事实上,它们的中间件的执行机制是不同的,特别是针对某个中间件中包含异步操作时;