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

Middleware design pattern in Node.js: Connect

本文关键字:设计模式 Connect 中间件 js Node      更新时间:2023-09-26

这个问题扩展了What is Node.js的Connect,Express和"中间件";?

我正在走学习Javascript的道路->Node.js->连接->快速->。。以便学习如何使用现代web开发堆栈。我有底层网络的背景,所以使用Node.js的nethttp模块很容易。使用服务器将请求路由到不同处理程序的一般模式看起来自然而直观。

转到Connect,恐怕我不理解这个";中间件";。例如,如果我创建一些中间件用于Connect-ala;

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

以及";使用";通过连接

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

我不知道我的中间件什么时候被调用。此外,如果我在use()中使用其他中间件,是否可以保证调用中间件的顺序?此外,我假设函数next()用于调用下一个(同样,我如何建立订单?)中间件;但是,没有传递任何参数(req、res、next)。这些参数是以某种方式隐式传递的吗?

我猜使用的中间件模块集合是串在一起的,从http回调开始->因此,在初始请求回调和服务器结束响应的中间添加了一组功能。

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

中间件被称为函数链,其顺序基于中间件定义顺序(时间)以及匹配的路由(如果适用)
考虑到reqres对象在链中传播,因此您可以沿链重用/改进/修改它们中的数据。

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

Generic是您在上面的示例中定义的:app.use,它将应用于每一个请求。每个中间件都必须在内部调用next(),如果它想继续下一个中间件的话。

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

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

可以使用一些中间件来断开return next(new Error());链。例如,它对于验证或身份验证中间件非常有用
中间件的另一种有用的使用模式是处理和解析请求数据,比如cookie,或者app.use(express.bodyParser());的好例子。