精简内核,所有额外功能都移到中间件里实现 https://koa.bootcss.com
不同的框架有不同的适用场景 https://chenshenhai.github.io/koa2-note/note/static/middleware.html
image.png
koa2 框架

  1. eggjs
  2. 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就是注册一个中间件,只有函数注册后,才是中间件

  1. const Koa = require('koa');
  2. const app = new Koa(); // 应用程序对象
  3. function getUesr(ctx, next) {}
  4. app.use(getUser);
  5. app.use((ctx, next) => {
  6. next();
  7. })
  • koa会自定帮你执行第一个中间件,后面的中间件都要自己来调用
  • next就是下个中间件函数,调用 next

koa核心点

  1. 以ctx来代替关于context对象
    1. 处理http请求时,Node提供了request和response两个对象
    2. Koa把两者封装到了同一个对象中,即context,缩写为ctx

context

context中封装了许多方法,大部分都是从原生的request/response 对象使用委托方式得来的,如下

  1. ctx.header
  2. ctx.headers
  3. ctx.method
  4. ctx.url
  5. ctx.originalUrl
  6. ctx.origin
  7. ctx.href
  8. ctx.path
  9. ctx.query
  10. ctx.querystring
  11. ctx.host
  12. ctx.hostname
  13. ctx.fresh
  14. ctx.stale
  15. ctx.socket
  16. ctx.protocol
  17. ctx.secure
  18. ctx.ip
  19. ctx.ips
  20. ctx.subdomains
  21. ctx.is()
  22. ctx.accepts()
  23. ctx.acceptsEncodings()
  24. ctx.acceptsCharsets()
  25. ctx.acceptsLanguages()
  26. ctx.get()

思考:ctx对象是如何获得这些属性和方法的

form response

  1. ctx.body
  2. ctx.status
  3. ctx.message
  4. ctx.length
  5. ctx.type
  6. ctx.headerSent
  7. ctx.redirect()
  8. ctx.attachment()
  9. ctx.set()
  10. ctx.append()
  11. ctx.remove()
  12. ctx.lastModified=
  13. ctx.etag=

koa处理 http请求

  1. 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发展

  1. connect,2010年,connect首先在Node服务器编程中引入了middleware的概念
    1. connect还提出了一些关于中间件使用的规范,
    2. 例如使用use方法加载中间件
    3. 通过next方法调用中间件等
  2. 中间件概念的引入,将web开发变成了一个个独立的模块,使得社区的开发者们可以专注在中间件模块的开发上

express

  1. Express框架是在Connect的基础上扩展而来的,继承了connect的大部分思想
    1. 4.x中,express摆脱了对connect的依赖,摒弃了除了静态文件模块之外的所有中间件,只包含核心的路由处理
    2. express中,路由没有被当做中间件
    3. 缺点:不支持中间件之间的异步流程

koa

  1. Koa的实现与connect相似,内部没有提供任何中间件,仅仅作为中间件的调用的脚手架
  2. 在web开发中,在收到http请求时,首先先将请求信息写入日志或者数据库,再返回对应的结果,这两个操作往往都是异步进行的
    1. 如果我们要顺序完成这两个任务,通常会使用嵌套回调的方式
    2. koa2采用 async & await,屏蔽了回调的细节,可以认为回调已经“不存在了”
  3. Koa剥离了各种中间件
    1. 优点:让框架变得更加轻量,有助于开发者自行选择需要的中间件
    2. 缺点:各种中间件都是由第三方开发,质量可能良莠不齐;查找使用人数较多的一些中间件

web框架要考虑的问题

  1. 静态文件怎么处理
  2. 路由怎么处理
  3. 数据存储用什么?
  4. 渲染页面,用模板,还是框架