Подробное объяснение принципа промежуточного программного обеспечения Express

Node.js внешний интерфейс JavaScript Express

предисловие

Express и Koa в настоящее время являются наиболее распространенными средами веб-разработки на основе узлов, и их разработчики составляют одну и ту же команду. Кажется, что Koa сейчас популярнее, но проектов, использующих Express, по-прежнему много, поэтому в этой статье я хочу рассказать о принципе промежуточного программного обеспечения Express.

Функции и классификация промежуточного программного обеспечения

Суть промежуточного ПО — это функция, которая делает то, что мы хотим сделать в процессе получения запроса и возврата соответствующего процесса. То, что он делает, описано в документации Express следующим образом:

выполнить любой код.
Измените объекты запроса и ответа.
Завершите цикл запрос-ответ.
Вызовите следующее промежуточное ПО в стеке.

Классификация

В документации Express они разделены на пять категорий, но их принципы одинаковы, но использование отличается:

Промежуточное ПО уровня приложения
промежуточное ПО уровня маршрута
промежуточное ПО для обработки ошибок
Встроенное промежуточное ПО
стороннее промежуточное ПО

Принцип промежуточного программного обеспечения

Во-первых, давайте посмотрим на использование промежуточного программного обеспечения:

var express = require('express')
var app = express();
app.use('/user', function (req, res, next) {
  //TODO
  next();
});
app.listen(8080)

Далее давайте сравним исходный код:

Есть три части, связанные с промежуточным программным обеспечением:

  • Express.js наследует application.js и предоставляет интерфейс
  • application.js монтирует все основные методы
  • Папка маршрутизатора обрабатывает логику маршрутизации

Давайте сначала посмотрим на код express.js:

Наиболее важной частью этой части кода является красная часть кода,mixinявляется сторонней библиотекой. Просто это можно понимать как наследование (на самом деле это не наследование, а смешение).

Далее мы смотрим на application.js:

Я скачал файл и удалил комментарии.Из этого изображения мы видим, что функция этого файла заключается в монтировании всех методов (включая ключевые API, такие как использование).
Тут важнее другоеuseметод, его роль заключается в использованииapp.useВсе зарегистрированное промежуточное ПО и методы маршрутизации передаютсяRouterкласс для обработки.
Затем давайте посмотрим на структуру класса папки маршрутизатора:

Index.js — это входной файл, который обрабатывает все маршруты;
Объявлено в layer.jsLayerкласс, который обрабатывает каждый уровень промежуточного программного обеспечения маршрутизации или каждого вспомогательного промежуточного программного обеспечения;
Объявлено в router.jsRouterкласс, который обрабатывает каждый дочерний маршрут.
Существует понятие sub-middleware, которое соответствует этому предложению в документе Express:

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

Это предложение означает, что мы можем написать код в следующем виде:

app.use('/user1', function fn1(req, res, next) {
  // TODO
  next();
}, function fn2(req, res, next) {
  //TODO
  next();
});
app.use('/user2', function fn3(req, res, next) {
  // TODO
  next();
}, function fn4(req, res, next) {
  //TODO
  next();
});

Приведенный выше код создает вспомогательный стек промежуточного программного обеспечения для пользователей user1 и user2 соответственно. Реализация этого синтаксиса основана наLayerкласс реализован.
Нарисуйте диаграмму, чтобы объяснить приведенный выше код:

Объясните код и диаграмму выше:
Мы написали два маршрута /user1 и /user2, и каждый маршрут дал два обработчика. Для этого кода Express обрабатывает его следующим образом:

  1. В файле index.js определитеstackмассив, затем создаст дваLayerположи этоstackсередина.
  2. Модуль route.js создаст еще один для /user1.stackИ фн1, фн2 дваLayer.
  3. /user2 — это то же самое, что /user1
  4. Наконец, Express выполнит каждую сверху вниз.LayerФункции в , соответствующие графу, выполняются последовательно сверху вниз и слева направо в порядке fn1, fn2, fn3 и fn4.

наконец

Вышеизложенный простой принцип мидлвара Express.Вернакулов много.Если написано неточно,надеюсь вы покритикуете и поправите.

использованная литература

официальный сайт экспресс
Адрес репозитория Express на github