koa中的中间件
1 | const Koa = require('koa'); |
执行下面的代码,然后在浏览器中输入127.0.0.1:3000,终端依次打印出 first second。
洋葱模型
1 | const Koa = require('koa'); |
执行上面的代码,然后在浏览器中输入127.0.0.1:3000,终端会依次打印出 1 3 4 2。
next返回值
1 | const Koa = require('koa'); |
执行上面的代码,然后在浏览器中输入127.0.0.1:3000,终端会依次打印 1 3 4 Promise { 'abc' } 2,如果没有 return "abc";,那么 a 为 Promise { undefined },可以看到,next() 的返回值就是 Promise。
await async
求值
加上 await 和 async 确保按洋葱顺序执行,如果不加上,很难保证按洋葱顺序执行。
1 | const Koa = require('koa'); |
执行上面的代码,然后在浏览器中输入127.0.0.1:3000,终端会依次打印 1 3 4 abc 2。
如果使用 .then,那么结果就不一样了,如下:
1 | const Koa = require('koa'); |
执行上面的代码,在浏览器中输入127.0.0.1:3000,终端会依次打印 1 3 4 2 abc
阻塞
1 | const Koa = require('koa'); |
1 | const Koa = require('koa'); |
比较上面的代码,第二段代码把异步变成了同步,所以 end-start 会变得很大
ctx
1 | const Koa = require('koa'); |
express中的中间件
1 | const express = require('express'); |
执行上面的代码,然后在浏览器中输入127.0.0.1:3000,终端会依次打印出 1 2 3。
分类
应用级中间件
路由级中间件
错误处理中间件
内置中间件
第三方中间件
举例
1 | const express = require('express'); |
上面这段代码,在浏览器中输入 http://127.0.0.1:3000 只会打印出 1,输入 http://127.0.0.1:3000/a 会依次打印出 1 2 a,输入 http://127.0.0.1:3000/b 回依次打印出 1 3。