一、koa2
koa2
,如下所示:
express
中间件是异步回调,koa2
原生支持 async/await
- 新开发框架和系统,都开始基于
koa2
,例如 egg.js
express
虽然未过时,但是 koa2
肯定是未来趋势
async
和 await
要点:
await
后面可以追加 promise
对象,获取 resolve
的值
await
必须包裹在 async
函数里面
async
函数执行返回的也是一个 promise
对象
try-catch
截获 promise
中 reject
的值
koa2
中间件的实现内部原理,代码如下所示:
const http = require('http')
function compose(middlewareList) {
return function (ctx) {
function dispatch(i) {
const fn = middlewareList[i]
try {
return Promise.resolve(fn(ctx, dispatch.bind(null, i + 1)))
} catch (err) {
return Promise.reject(err)
}
}
return dispatch(0)
}
}
class LikeKoa2 {
constructor () {
this.middlewareList = []
}
use (fn) {
this.middlewareList.push(fn)
return this
}
createContext (req, res) {
const ctx = {
req,
res
}
ctx.query = req.query
return ctx
}
handleRequest (ctx, fn) {
return fn(ctx)
}
callback () {
const fn = compose(this.middlewareList)
return (req, res) => {
const ctx = this.createContext(req, res)
return this.handleRequest(ctx, fn)
}
}
listen (...args) {
const server = http.createServer(this.callback())
server.listen(...args)
}
}
module.exports = LikeKoa2