管道机制一开始是UNIX中出现的,一个程序的输出直接成为下一个程序的输入,就像水流过管道一样方便(类似于函数式编程中的filter或者一切皆对象的链式操作),而且多个单一功能的函数通过管道组合成复合函数(UNIX的“KISS”原则)。
nodejs中的管道,有一个形象的比喻是包含水泵,仪表,阀门的下水管道,当前水流入位置的下游(直到出口)的函数按顺序连接(如果你有个向水中注入什么东西的阀门,这个阀门“下游”的所有东西都会含有这个新添加的原料app.use()),这个概念类似于OOP的一种设计模式,一个包含一些属性的对象实例经过一个类(初始化)中时,这个类依此生成的对象也具有这些属性(装饰器模式?)
nodejs中的管道应该是对上下文敏感的,考虑到TCP/IP的连接,断开连接的单向性,可以把这种管道看成是模块化的复合函数,包含有特定的上下文信息。
针对HTTP谓词的DSL。
路由处理器(app.get ,app.post等,经常被统称为app.VERB),是中间件的子集(只处理特定HTTP谓词的中间件)。
next()很灵活,既可以进行错误处理,又可以作为接下来函数的入口钩子,和CPS有点类似。