Промежуточное ПО - это функции, которые имеют доступ к объекту запроса (req
), объекту ответа (res
) и следующей функции промежуточного программного обеспечения в цикле запроса-ответа приложения. Следующая функция промежуточного программного обеспечения обычно обозначается переменной с именем next
.
- Как следует из названия, это происходит в середине чего-то, и это цикл запроса и ответа.
- ПО промежуточного слоя имеет доступ к объектам запроса и ответа.
- Промежуточное ПО имеет доступ к следующей функции жизненного цикла запрос-ответ.
Функции промежуточного программного обеспечения могут выполнять следующие задачи:
- Выполните любой код.
- Внесите изменения в объекты запроса и ответа.
- Завершите цикл запрос-ответ.
- Вызов следующего промежуточного программного обеспечения в стеке.
Если текущая функция промежуточного программного обеспечения не завершает цикл запроса-ответа, она должна вызвать next()
, чтобы передать управление следующей функции промежуточного программного обеспечения. В противном случае запрос останется зависшим.
Что это дальше ()?
Промежуточное ПО - это в основном функция, которая будет получать объекты запроса и ответа, как это делают ваши обработчики маршрутов. В качестве третьего аргумента у вас есть другая функция, которую вы должны вызвать после завершения вашего кода промежуточного программного обеспечения. Это означает, что вы можете дождаться завершения асинхронной базы данных или сетевых операций, прежде чем переходить к следующему шагу. Это может выглядеть так:
Если текущая функция промежуточного программного обеспечения не завершает цикл запроса-ответа, она должна вызвать next()
, чтобы передать управление следующей функции промежуточного программного обеспечения. В противном случае запрос останется висеть
Типы экспресс-промежуточного программного обеспечения
- Промежуточное ПО уровня приложения
app.use
- Промежуточное ПО уровня маршрутизатора
router.use
- Встроенное промежуточное ПО
express.static,express.json,express.urlencoded
- Промежуточное ПО для обработки ошибок
app.use(err,req,res,next)
- Стороннее промежуточное ПО
bodyparser,cookieparser
Промежуточное ПО уровня приложения
Пример 1. По промежуточного слоя для аутентификации
Предположим, у нас есть пять маршрутов getUsers, getDetails, updateDetails, isLoggedIn, isLoggedOut.
каждый маршрут должен быть аутентифицирован, если пользователь не аутентифицирован, тогда он не может вызывать вышеупомянутые маршруты, поэтому каждый GET, POST вызывает обязательную аутентификацию. В этом случае мы создаем промежуточное ПО для аутентификации.
Теперь, когда поступит запрос, промежуточное ПО auth выполнит некоторую логику аутентификации, которую мы написали внутри него. После успешной аутентификации необходимо вызвать оставшуюся маршрутизируемую с помощью next ()
если аутентификация завершилась неудачно, он не будет выполнять следующий маршрут, выйдите из промежуточного программного обеспечения с логикой ответа на ошибку
Пример 2: ведение журнала по промежуточного слоя
Промежуточное ПО уровня маршрутизатора
Промежуточное ПО уровня маршрутизатора работает так же, как промежуточное ПО уровня приложения, за исключением того, что оно привязано к экземпляру express.Router()
.
const router = express.Router()
Загрузите промежуточное ПО уровня маршрутизатора с помощью функций router.use()
и router.METHOD()
.
Ошибка при передаче промежуточного программного обеспечения
Express JS поставляется с параметрами обработки ошибок по умолчанию, определяет функции промежуточного программного обеспечения для обработки ошибок так же, как и другие функции промежуточного программного обеспечения, за исключением того, что функции обработки ошибок имеют четыре аргумента вместо трех:
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
Стороннее ПО промежуточного слоя
В некоторых случаях мы будем добавлять некоторые дополнительные функции в наш бэкэнд.
Установите модуль Node.js для получения необходимой функциональности, а затем загрузите его в свое приложение на уровне приложения или на уровне маршрутизатора.
Пример: body-parser
Все промежуточные программы будут заполнять свойство req.body
проанализированным телом, когда Content-Type
заголовок запроса.
app.use ({urlencoded: false})
Неполный список функций промежуточного программного обеспечения сторонних производителей, которые обычно используются с Express, см. В разделе Стороннее промежуточное программное обеспечение.