精简内核,所有额外功能都移到中间件里实现 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. 渲染页面,用模板,还是框架