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

gon*_*one 14 javascript middleware connect node.js

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

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

转向Connect,我恐怕我不理解这个"中间件"的范例和数据的一般流程.例如,如果我创建一些用于Connect ala的中间件;

// example.js    
module.exports = function (opts) {
    // ...
    return function(req, res, next) {
        // ...
        next();
    };
};
Run Code Online (Sandbox Code Playgroud)

并在Connect via中"使用"它

var example = require('./example');
// ...
var server = connect.createServer();
// ...
server.use(example(some_paramater));
Run Code Online (Sandbox Code Playgroud)

我不知道我的中间件何时被调用.另外,如果我正在使用use()其他middlware,我可以保证调用中间件的顺序吗?此外,我假设该函数next()用于调用下一个(再次,我如何建立一个排序?)中间件; 但是,没有传递参数(req,res,next).这些参数是否以某种方式隐式传递?

猜测所使用的中间件模块的集合是串联起来的,从http回调开始- >因此在初始请求回调和服务器结束响应的过程添加了一堆功能.

我试图理解中间件范例,以及信息/执行的流程.

任何帮助是极大的赞赏.谢谢你的阅读

mok*_*oka 13

中间件被称为一系列功能,其顺序基于具有匹配路由的中间件定义顺序(时间)(如果适用).
考虑到req并且res对象正在链中传播,因此您可以沿着链重用/改进/修改它们中的数据.

中间件有两种常见用例:通用特定.

通用就像您在上面的示例中定义的那样:app.use它将适用于每个请求.next()如果要进入下一个中间件,每个中间件都必须调用内部.

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

链顺序基于定义顺序.因此,以同步方式或顺序可靠的异步方式定义中间件非常重要.否则,当中间件链相互依赖时,不同的中间件顺序可能会破坏逻辑.

一些中间件可用于打破链条return next(new Error());.例如,它对验证或身份验证中间件很有用.
中间件的另一个有用的模式是处理和解析请求数据,如cookie,或者这样的好例子app.use(express.bodyParser());.