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

标签 javascript node.js connect middleware

这个问题扩展了 What is Node.js' Connect, Express and "middleware"? 的问题。

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

转到Connect,恐怕我不了解这个“中间件”的范式和一般数据流。例如,如果我创建了一些用于 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()'ing 其他中间件,是否可以保证调用中间件的顺序?此外,我假设函数 next() 用于调用 next (再次,我如何建立排序?)中间件;但是,没有传递任何参数(req、res、next)。这些参数是否以某种方式隐式传递?

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

我正在尝试了解中间件范式以及信息/执行流程。

非常感谢任何帮助。感谢阅读

最佳答案

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

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

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

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

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

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

的一个很好的例子

关于javascript - Node.js 中的中间件设计模式 : Connect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17750308/

相关文章:

javascript - 动态引导轮播项目

node.js - 使用express和vue js登录成功后如何重定向到特定页面?

node.js - 环回:model.settings.validateUpsert 被覆盖为 false

安卓工作室 3.2.1 : mixing versions can lead to runtime crashes when connect firebase

gruntjs - 将 gzip 压缩应用于 grunt-contrib-connect 提供的文件

c++ - 具有返回值的信号/插槽不起作用

javascript - 我怎样才能用javascript找出单元格的大小

javascript - iphone/ios 中心的按钮文本

javascript - 我的网页需要 JSZip 和 gzip,JSZip 具有所有成分,但以我无法破解的方式隐藏它们

javascript - DCMTK dcm2json 会为损坏的 DS 或 IS 值生成无效的 JSON