Node.js中的中间件devise模式:连接

这个问题扩展了什么是Node.js的Connect,Express和“中间件”?

我正在学习Javascript – > Node.js – > Connect – > Express – > …的路线,以了解如何使用现代Web开发堆栈。 我有一个低层networking的背景,所以起床和Node.js的nethttp模块很容易。 使用服务器将请求路由到不同处理程序的一般模式看起来很自然和直观。

转移到连接,恐怕我不了解这个“中间件”的数据范式和一般stream程。 例如,如果我创build一些用于Connect ala的中间件;

 // example.js module.exports = function (opts) { // ... return function(req, res, next) { // ... next(); }; }; 

并在Connect via中“使用”

 var example = require('./example'); // ... var server = connect.createServer(); // ... server.use(example(some_paramater)); 

我不知道什么时候我的中间件被调用。 另外,如果我use()其他中间件,我可以保证中间件的调用顺序吗? 更有甚者,我正在假设函数next()被用来调用下一个 (又是如何build立一个sorting?)中间件; 然而,没有参数(req,res,next)被传递。 这些参数是否以某种方式隐式传递?

猜测 ,所使用的中间件模块集合串在一起,从httpcallback开始 – >因此,在初始请求callback和服务器结束响应中间添加了一堆function。

我试图了解中间件范例,以及信息/执行的stream程。

任何帮助是极大的赞赏。 感谢您的阅读

中间件被称为一个函数链,基于中间件定义顺序(时间)和匹配path(如果适用)的顺序。
考虑到reqres对象正在通过链,所以你可以重用/改进/修改链中的数据。

中间件有两种一般用例: 通用的特定的

generics就像你在上面的例子中定义的: app.use ,它将适用于每一个请求。 如果要继续下一个中间件,每个中间件都必须调用next()

当你使用app.get('/path', function(...这个实际的函数也是中间件,只是内联的定义,所以它完全基于中间件,没有endware :D

链顺序基于定义顺序。 因此,以同步方式或顺序可靠的asynchronous方式来定义中间件很重要。 否则中间件的不同顺序会中断逻辑,当中间件链相互依赖的时候。

一些中间件可以用来打破return next(new Error()); 。 例如用于validation或authentication中间件是有用的。
另一个有用的中间件模式是处理和parsing请求数据,比如cookies,或者是这样的app.use(express.bodyParser());很好的例子app.use(express.bodyParser());