基于ES7开发,彻底使用Promise并配合async
来实现异步的node框架css
核心是对node的HTT模块P进行了封装,用多个async函数组成处理链,来不断地接收HTTP请求(ctx对象)并处理。html
这拯救了无限嵌套回调和promise无限链式.then()的写法node
Middleware:koa把不少async函数组成一条处理链,一个async函数就是一个middleware,函数中能够本身处理一些事情,而后用ES7的await ->await next()
来调用下一个async函数,express
middleware顺序很重要,若是一个middleware没有调用await next()
,则处理链中断,后续的middleware将再也不执行。数组
await只有一个限制,就是必须在async函数中调用promise
核心代码:服务器
对于每个http请求,koa将调用咱们传入的异步函数来处理:app
//一个async函数 async (ctx, next) => { await next(); // 设置response的Content-Type: ctx.response.type = 'text/html'; // 设置response的内容: ctx.response.body = '<h1>Hello, koa2!</h1>'; }
KOA-ROUTER框架
基本路由实现:koa
(注意:更多的时候不止须要返回静态页面,还须要根据不一样的数据渲染页面,这时候就须要用到nunjucks模板
配合nunjucks模板时,总体思路也是大同小异,controllers中把router跳转换成用render()模板渲染的操做就能够,固然模板渲染这个操做须要另写一个middleware
)
2. controller.js 依次读取(fs模块)controllers中每一个js文件中的各个处理函数,push进路由, 当匹配到对应url时,controllers中对应的函数将被执行
(注意:配合nunjucks模板时,还须要在开发环境加一个处理静态文件的middleware,以便在HTML中引入css/js等静态文件。模拟服务器端处理静态文件的功能)
3. app.js中执行controller.js
Koa-bodyparser: 用于解析原始request请求消息体,好比post请求发送表单,数据存在请求的body中,可是node与koa的request对象都没有解析请求消息体的功能。
还能够用于rest API的开发
注:REST请求是一种请求类型和响应类型均为JSON的HTTP请求
廖雪峰老师rest的教程: https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014735914606943e2866257aa644b4bdfe01d26d29960b000
express实现异步只能经过层层回调,能够配合co函数库实现相似于koa的middleware