Схема разработки промежуточного программного обеспечения в 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());
.