Схема разработки промежуточного программного обеспечения в Node.js: Connect

Этот вопрос расширяет круг вопросов Что такое Node.js 'Connect, Express и "middleware" ?

Я собираюсь изучить Javascript → Node.js → Connect → Express → ..., чтобы узнать об использовании современного стека веб-разработки. У меня есть опыт работы в низкоуровневых сетях, поэтому легко и удобно работать с модулями Node.js 'net и http. Общая схема использования сервера для маршрутизации запросов к различным обработчикам казалась естественной и интуитивной.

Переходя к Connect, я боюсь, я не понимаю парадигму и общий поток данных этого "промежуточного ПО". Например, если я создаю некоторое промежуточное программное обеспечение для использования с Connect ala;

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

и "использовать" его в Connect через

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

Я не знаю, когда будет вызвано мое промежуточное программное обеспечение. Кроме того, если я use() 'другой миддлвер, могу ли я быть гарантирован в том порядке, в котором вызывается промежуточное ПО? Furthuremore, я полагаю, что функция next() используется для вызова следующего (опять же, как установить порядок?) Промежуточного программного обеспечения; однако никакие параметры (req, res, next) не передаются. Эти параметры передаются неявно?

Я предполагаю, что набор модулей промежуточного программного обеспечения используется вместе, начиная с обратного вызова http → , следовательно, добавлена ​​функция функциональности, добавленная в середине обратного вызова первоначального запроса, и сервер, заканчивающий ответ.

Я пытаюсь понять парадигму промежуточного ПО и поток информации/выполнение.

Любая помощь приветствуется. Спасибо за чтение

Ответ 1

Среднее программное обеспечение называется цепочкой функций, с порядком на основе порядка определения промежуточного программного обеспечения (время) с соответствующими маршрутами (если применимо).
Принимая во внимание, что объекты req и res перемещаются по цепочке, поэтому вы можете повторно использовать/улучшать/модифицировать данные в них по цепочке.

Для промежуточного программного обеспечения существуют два общих варианта использования: общий и .

Общий, как вы определили в примере выше: app.use, он будет применяться к каждому отдельному запросу. Каждое промежуточное программное обеспечение должно вызывать next() внутри, если оно хочет перейти к следующему промежуточному программному обеспечению.

Когда вы используете app.get('/path', function(..., эта фактическая функция также является промежуточным программным обеспечением, только встроенным. Таким образом, он полностью основан на срединных средах, и нет endware: D

Порядок цепочек основан на порядке определения. Поэтому важно определить промежуточное программное обеспечение синхронно или упорядоченно-асинхронно. В противном случае другой порядок промежуточного программного обеспечения может нарушить логику, когда цепочка промежуточного программного обеспечения зависит друг от друга.

Некоторое промежуточное ПО может использоваться для разрыва цепочки return next(new Error());. Это полезно, например, для проверки или промежуточного программного обеспечения для проверки подлинности.
Другим полезным примером использования промежуточного программного обеспечения является обработка и анализ данных запроса, таких как файлы cookie, или хороший пример такого app.use(express.bodyParser());.