предисловие
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 обрабатывает его следующим образом:
- В файле index.js определите
stack
массив, затем создаст дваLayer
положи этоstack
середина. - Модуль route.js создаст еще один для /user1.
stack
И фн1, фн2 дваLayer
. - /user2 — это то же самое, что /user1
- Наконец, Express выполнит каждую сверху вниз.
Layer
Функции в , соответствующие графу, выполняются последовательно сверху вниз и слева направо в порядке fn1, fn2, fn3 и fn4.
наконец
Вышеизложенный простой принцип мидлвара Express.Вернакулов много.Если написано неточно,надеюсь вы покритикуете и поправите.
использованная литература
официальный сайт экспресс
Адрес репозитория Express на github