84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
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
啦。(实现略)二、题主问题
回到问题中的“事件效果”。参考上面的步骤,基本就知道该怎么实现了。