一、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