84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
nodejs的事件实现类似:
app.use(function (req, res, next) { cosole.log(res) next() }) app.post(...)
类似上面,需要实现类似的事件效果:
event.watch('all', cb) event.watch('[event type]', cb)
就是监控所有事件并作出反馈但不会影响事件的单独执行。这里使用once和emit创建触发事件
业精于勤,荒于嬉;行成于思,毁于随。
以下内容主要分两部分:
express中间件大致实现。
题主最后的问题。
先大致说下express里的路由中间件是怎么实现的。(为了减少复杂度,这里先不说路由拆分的实现)
express 内部维护了一个叫做stack的数据,当用户调用类似app.post(path, fn) 这样的路由注册方法时,就会往stack里添加一个路由实例。这里抽象的认为这个路由实例是 {path: path, handler: fn},其中,path为路由对应的路径,handler为对应的中间件。
express
stack
app.post(path, fn)
{path: path, handler: fn}
path
handler
比较特殊的是app.all(path, fn),其实内部实现也不复杂,可以粗暴的认为,是遍历一遍node支持的所有htp methods,然后调用路由注册方法,比如app.get(path, fn)、app.post(path, fn)...(内部实现比这巧妙些,没这么粗暴)
app.all(path, fn)
app.get(path, fn)
网络请求过来,express 内部会检测请求的http method、路径,然后遍历stack数组,如果同时满足 method相同 且 路由命中,那么,就调用对应的 中间件。
method相同 且 路由命中
method相同 且 路由命中 的路由规则 可能有多个,那么是怎么实现多个中间件顺序调用的呢?就是next啦。(实现略)
next
回到问题中的“事件效果”。参考上面的步骤,基本就知道该怎么实现了。
以下内容主要分两部分:
express中间件大致实现。
题主最后的问题。
一、express中间件大致实现
先大致说下express里的路由中间件是怎么实现的。(为了减少复杂度,这里先不说路由拆分的实现)
路由添加
express
内部维护了一个叫做stack
的数据,当用户调用类似app.post(path, fn)
这样的路由注册方法时,就会往stack
里添加一个路由实例。这里抽象的认为这个路由实例是{path: path, handler: fn}
,其中,path
为路由对应的路径,handler
为对应的中间件。比较特殊的是
app.all(path, fn)
,其实内部实现也不复杂,可以粗暴的认为,是遍历一遍node支持的所有htp methods,然后调用路由注册方法,比如app.get(path, fn)
、app.post(path, fn)
...(内部实现比这巧妙些,没这么粗暴)请求处理
网络请求过来,
express
内部会检测请求的http method、路径,然后遍历stack
数组,如果同时满足method相同 且 路由命中
,那么,就调用对应的 中间件。method相同 且 路由命中
的路由规则 可能有多个,那么是怎么实现多个中间件顺序调用的呢?就是next
啦。(实现略)二、题主问题
回到问题中的“事件效果”。参考上面的步骤,基本就知道该怎么实现了。