精简内核,所有额外功能都移到中间件里实现 https://koa.bootcss.com
不同的框架有不同的适用场景 https://chenshenhai.github.io/koa2-note/note/static/middleware.html
koa2 框架
- eggjs
- midway
koa参考资料
https://blog.csdn.net/u010668495/article/details/70556712
https://www.cnblogs.com/stephenykk/p/7229469.html[
](https://chenshenhai.github.io/koa2-note/note/static/middleware.html)
应用程序对象
new 出来的实例是 应用程序对象,应用程序对象上有很多中间件和方法可以调用
- 中间件
- 方法
koa中间件
koa中间件 https://github.com/koajs
中间件就是一个函数;定义一个中间件,就是定义一个函数
中间件不是立即执行,而是当请求发送过来,或匹配到对应的路由时触发
app.use就是注册一个中间件,只有函数注册后,才是中间件
const Koa = require('koa');
const app = new Koa(); // 应用程序对象
function getUesr(ctx, next) {}
app.use(getUser);
app.use((ctx, next) => {
next();
})
- koa会自定帮你执行第一个中间件,后面的中间件都要自己来调用
- next就是下个中间件函数,调用 next
koa核心点
- 以ctx来代替关于context对象
- 处理http请求时,Node提供了request和response两个对象
- Koa把两者封装到了同一个对象中,即context,缩写为ctx
context
context中封装了许多方法,大部分都是从原生的request/response 对象使用委托方式得来的,如下
ctx.header
ctx.headers
ctx.method
ctx.url
ctx.originalUrl
ctx.origin
ctx.href
ctx.path
ctx.query
ctx.querystring
• ctx.host
• ctx.hostname
• ctx.fresh
• ctx.stale
• ctx.socket
• ctx.protocol
• ctx.secure
• ctx.ip
• ctx.ips
• ctx.subdomains
• ctx.is()
• ctx.accepts()
• ctx.acceptsEncodings()
• ctx.acceptsCharsets()
• ctx.acceptsLanguages()
• ctx.get()
思考:ctx对象是如何获得这些属性和方法的
form response
ctx.body
• ctx.status
• ctx.message
• ctx.length
• ctx.type
• ctx.headerSent
• ctx.redirect()
• ctx.attachment()
• ctx.set()
• ctx.append()
• ctx.remove()
• ctx.lastModified=
• ctx.etag=
koa处理 http请求
- koa的ctx对象中封装了request以及response对象,那么在处理http请求中,使用ctx对象就可以完成所有的处理 ```jsx ctx.body = ‘hello world’
// 等价于 res.statusCode = 200; res.end(“Hello World”); ``` ctx.body也可以写成ctx.response.body,ctx相当于ctx.request/response的别名
koa发展
- connect,2010年,connect首先在Node服务器编程中引入了middleware的概念
- connect还提出了一些关于中间件使用的规范,
- 例如使用use方法加载中间件
- 通过next方法调用中间件等
- 中间件概念的引入,将web开发变成了一个个独立的模块,使得社区的开发者们可以专注在中间件模块的开发上
express
- Express框架是在Connect的基础上扩展而来的,继承了connect的大部分思想
- 4.x中,express摆脱了对connect的依赖,摒弃了除了静态文件模块之外的所有中间件,只包含核心的路由处理
- express中,路由没有被当做中间件
- 缺点:不支持中间件之间的异步流程
koa
- Koa的实现与connect相似,内部没有提供任何中间件,仅仅作为中间件的调用的脚手架
- 在web开发中,在收到http请求时,首先先将请求信息写入日志或者数据库,再返回对应的结果,这两个操作往往都是异步进行的
- 如果我们要顺序完成这两个任务,通常会使用嵌套回调的方式
- koa2采用 async & await,屏蔽了回调的细节,可以认为回调已经“不存在了”
- Koa剥离了各种中间件
- 优点:让框架变得更加轻量,有助于开发者自行选择需要的中间件
- 缺点:各种中间件都是由第三方开发,质量可能良莠不齐;查找使用人数较多的一些中间件
web框架要考虑的问题
- 静态文件怎么处理
- 路由怎么处理
- 数据存储用什么?
- 渲染页面,用模板,还是框架