koa-compose模块可以将多个中间件合成为一个。请看下面的例子(完整代码看这里:https://github.com/ruanyf/koa-demos/blob/master/demos/11.js)。 // demos/11.js const compose = require('koa-compose'); const logger = (ctx, next) => { console.log(`$ $ $`); next(); } const main = ctx ...
koa-compose是koa用到的类库,用于koa中间件合并执行,compose是将多个函数合并成一个函数(eg: a() + b() +c()=> c(b(c())),主要使用Promise/Async、递归调用实现。整个代码包括注释不到50行,非常精巧。 安装 npm install koa-compose 1. 用法 compose([fun a{}, fun b{}, fun c{}, …]) 例子 ...
* @api public */callback(){constfn=compose(this.middleware)if(!this.listenerCount('error'))this.on('error',this.onerror)consthandleRequest=(req,res)=>{constctx=this.createContext(req,res)returnthis.handleRequest(ctx,fn)}returnhandleRequest}/** * Handle request in callback. * * @api pr...
零、准备 ⾸先,检查 Node 版本。$ node -v v8.0.0 Koa 必须使⽤ 7.6 以上的版本。如果你的版本低于这个要求,就要先升级 Node。然后,克隆本⽂的配套。(如果不⽅便使⽤ Git,也可以下载解压。)$ git clone https://github.com/ruanyf/koa-demos.git 接着,进⼊⽰例库,安装依赖。$ ...
首先我们把目光放到index与i两个变量上,当执行执行compose(middleware)函数时,会返回一个闭包函数distpach(0),闭包函数执行时,dispatch函数内部的判断逻辑如下: 若i小于等于index 则报出错误:'next() called multiple times'。 若i大于index时,将i赋予index,此时i与index相等。
从调试进入fnMiddleware(ctx)方法,你就会发现进入koa-compose的返回函数中,i=0,从第一个中间件函数开始执行。 可以看的从第一个中间件开始执行,这里需要注意dispatch中的注释地方。 functiondispatch(i){if(i<=index)returnPromise.reject(newError('next() called multiple times'))index=iletfn=middleware[i]if...
koa-compose是koa中间件的核心部分, 控制着中间件的执行流程, 造就了经典的洋葱模型。 module.exports =composefunctioncompose(middleware) {//首先是参数类型检查,不符合就抛错//middleware必须是数组if(!Array.isArray(middleware))thrownewTypeError('Middleware stack must be an array!')//middleware的项必须...
koa-compose块可以将多个中间件合成为一个。 constcompose=require('koa-compose');constlogger=(ctx,next)=>{console.log(`${Date.now()}${ctx.request.method}${ctx.request.url}`);next();};constmain=ctx=>{ctx.response.body='Hello World';};constmiddlewares=compose([logger,main]);app.use(mid...
koa-compose compose 的职责很单一,依次执行所有的中间件函数。 首先,检查 middleware 是中间件函数组成的数组。返回接受 ctx 上下文对象的 fn 函数。 function compose (middleware) { if (!Array.isArray(middleware)) throw new TypeError('Middleware stack must be an array!') for (const fn of middleware)...
一、基本用法 1.1 架设 HTTP 服务 只要三行代码(https://github.com/ruanyf/koa-demos/blob/master/demos/01.js),就可以用 Koa 架设一个 HTTP 服务。 // demos/01.js const Koa = require('koa'); const app = new Koa(); app.listen(3000); ...