ノードJSにおけるKoa2ミドルウェアの実現原理の分析

一、koa2

  1. koa2、次のように:
  • expressミドルウェアは非同期コールバック、koa2ネイティブサポートですasync/await
  • 新しい開発フレームワークとシステムはkoa2、たとえば、egg.js
  • express日付はありませんが、koa2確かに将来のトレンドです
  1. asyncそしてawaitポイント:
  • awaitpromiseオブジェクトを続けることができresolve、値を取得します
  • awaitasync内部の関数にラップする必要があります
  • asyncまた、関数はpromiseオブジェクトの戻りを実行します
  • try-catchインターセプトpromisereject
  1. 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))) // promise 对象
      } 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

おすすめ

転載: blog.csdn.net/weixin_42614080/article/details/110944334