express 洋葱模型 路由管理 中间件

  express 路由管理,通过 app.express();  app.METHOD(path,fn(req, res)的方式进行路由的配置。实现了请求的接口的路由的拆分。那么可以将路由配置,分发到不同的文件中,进行分类管理。非常的nice。那么单个接口的能不能拆分更小的粒度尽心管理呢,答案是可以的。那就是中间件的方式。

 express在路由函数回调函数中进行中间件处理的方式是依赖于,回调函数的第三个参数next ,如下:

 app.get('/',function(req, res,next){

// 逻辑1 比如数据的初步处理

next() // 调用next() 执行下一个回调函数

if(property1)  {// 进行一些处理}   //  可以利用后面中间件的一些状态通过res或者req穿出。

// 挂载参数部分  req.property = property;

},function(req, res,next){

// 逻辑2 比如数据的一些判断之后的逻辑

next()

},function(req, res,next){

// 逻辑3 必须结果处理的一些逻辑

// 得出的property1状态,如果会影响上面的一个中间件的话 ,可以将property1挂载在res上,在上面的中间件函数中可以访问的到

res.property1 = property1 ; 

})

上述例子给了一个大致的利用中间件,对业务逻辑进行划分的思路,实际情况可以自己来划分。将这些逻辑代码划分在多个函数中之后,那么久可以对复杂的逻辑

放在不同的文件中进行单独处理。 需要的时候,然后require进来。更好的定位错误,和管理项目。

但是特别要注意的是!!! ,这里没一个函数代码中的 ,一些特殊参数,如上列子中,的proerpry不能够再直接在后面的中间件中访问到,需要挂载到req或者res上

通过res.property 进行访问。

并且!!!!!!!!   ,这里的所有next之后的回调函数,并非是一直向下的,什么意思,express中间件是一个横向的洋葱模型,大家想象一下,拿一根很长的针,从洋葱的左侧,经过一层一层的外皮内部之后,又经过一层一层的外皮到达洋葱的另一端。 

就是数据或逻辑的处理,是可以穿入和传出的。并非是下面的回到函数,一直接收上面回调函数的影响结果。也可以在下面的回调函数中,创建状态丢给上面的中间件进行判断和处理的。而这个还是依赖于req,res。比如上面的  property1属性的挂载。

 

在打一个通俗的彼方,有3个朋友一起做火车出行。他们各自有一包东西,过安检的时候,第一个包放上去,

,缓慢的通过机器进行检查。通过第一个包时,发现里面有瓶酒精,(他们准备火车上煮火锅)机器发出了警报,民警提示不能够带酒精上火车。

后面两位朋友,默默的把自己包里的酒精拿了出来。(看来是一顿大火锅)第三个包通过后,机器提示安全通过,第一个朋友忽然意识到,没道理啊,

我明明塞了一捆鞭炮放在第三个朋友包里,怎么机器没有报警。这些通过机器没有报警这么一个状态,第一个朋友知道了,第三个朋友早就知道鞭炮不能上火车,没有带鞭炮了。(他准备吃火锅之间,放鞭炮庆祝的)

在上面的模型中,这台安检机器 ,就是携带数据(背包和里面的东西)不断的通过检测,背包里的危险品被拿出。第一个包被检查出酒精,后面的朋友自觉的拿出了酒精

就是前面中间件对后面中间件的影响,而 第三个包检查完没有鞭炮是,他们知道了,第一个人知道了鞭炮没带,就是后面中间件对前面中间件的影响。

 

posted @ 2020-08-14 10:29  爱编程的那尼拓  阅读(528)  评论(0编辑  收藏  举报