Почти каждое приложение Express, которое я вижу, имеет app.use
утверждение для промежуточного программного обеспечения, но я не нашел четкого и краткого объяснения того, что такое промежуточное программное обеспечение на самом деле и что делает это app.use
утверждение. Даже сами экспресс-документы немного расплывчаты в этом. Можете ли вы объяснить эти понятия для меня, пожалуйста?
228
Ответы:
промежуточный слой
Я на полпути к разделению концепции промежуточного программного обеспечения в новом проекте.
Промежуточное программное обеспечение позволяет вам определять стек действий, которые вы должны выполнять. Экспресс-серверы сами по себе представляют собой связующее ПО.
Затем вы можете добавить слои в стек промежуточного программного обеспечения, вызвав
.use
Уровень в стеке промежуточного программного обеспечения - это функция, которая принимает n параметров (2 для экспресс-функции,
req
&res
) иnext
функцию.Промежуточное программное обеспечение ожидает, что слой выполнит некоторые вычисления, увеличит параметры и затем вызовет
next
.Стек ничего не делает, если вы не справитесь с этим. Express будет обрабатывать стек каждый раз, когда входящий HTTP-запрос перехватывается на сервере. С промежуточным ПО вы обрабатываете стек вручную.
Более полный пример:
В экспресс-выражениях вы просто определяете стек операций, которые вы хотите, чтобы экспресс обрабатывал для каждого входящего HTTP-запроса.
С точки зрения экспресса (а не соединения) у вас есть глобальное промежуточное ПО и промежуточное ПО для конкретных маршрутов. Это означает, что вы можете присоединить стек промежуточного программного обеспечения к каждому входящему HTTP-запросу или только к HTTP-запросам, которые взаимодействуют с определенным маршрутом.
Расширенные примеры экспресс и промежуточного программного обеспечения:
источник
app.use()
синтаксисом. Какова реальная возвращаемая стоимость промежуточного программного обеспечения и чтоuse
с ним делать?После упрощения веб-сервер можно рассматривать как функцию, которая принимает запрос и выводит ответ. Таким образом, если вы рассматриваете веб-сервер как функцию, вы можете организовать его на несколько частей и разделить их на более мелкие функции, чтобы их композиция была исходной функцией.
Промежуточные программы - это небольшие функции, которые вы можете создавать вместе с другими, и очевидным преимуществом является то, что вы можете использовать их повторно.
источник
Я добавляю поздний ответ, чтобы добавить что-то, не упомянутое в предыдущих ответах.
К настоящему времени должно быть ясно, что промежуточное ПО выполняет функции, выполняемые между запросом клиента и ответом сервера . Наиболее распространенные функции промежуточного программного обеспечения: управление ошибками, взаимодействие с базой данных, получение информации из статических файлов или других ресурсов. Для перемещения по стеку промежуточного программного обеспечения должен быть вызван следующий обратный вызов, вы можете увидеть его в конце функции промежуточного программного обеспечения, чтобы перейти к следующему шагу в потоке.
Вы можете использовать
app.use
подход , и есть поток , как это :но вы также можете использовать другой подход и передавать каждое промежуточное ПО в качестве аргументов функции. Вот пример с сайта MooTools Nodejs, где промежуточное ПО получает поток Twitter, Github и Blog перед
response
отправкой обратно клиенту. Обратите внимание, как функции передаются в качестве аргументов вapp.get('/', githubEvents, twitter, getLatestBlog, function(req, res){
. Использованиеapp.get
будет вызываться только для запросов GET,app.use
будет вызываться для всех запросов.источник
.get()
метод принимает 3 типа аргументов: первый, последний и средний. Внутренне он определяет, существует ли больше аргументов, чем 2, и использует их (средние) в качестве функций промежуточного программного обеспечения, вызывая их слева направо.У руководства expressjs есть довольно аккуратный ответ на ваш вопрос, я настоятельно рекомендую вам прочитать его, я выкладываю небольшой фрагмент руководства, руководство довольно хорошее.
Написание промежуточного программного обеспечения для использования в приложениях Express
обзор
Функции промежуточного программного обеспечения - это функции, которые имеют доступ к объекту запроса ( req ), объекту ответа ( res ) и следующей функции в цикле запрос-ответ приложения. Следующая функция - это функция в маршрутизаторе Express, которая при вызове выполняет промежуточное ПО, которое следует за текущим промежуточным ПО.
Функции промежуточного программного обеспечения могут выполнять следующие задачи:
Если текущая функция промежуточного программного обеспечения не завершает цикл запрос-ответ, она должна вызвать next (), чтобы передать управление следующей функции промежуточного программного обеспечения. В противном случае запрос останется висеть.
пример
Вот пример простого приложения «Hello World» Express. В оставшейся части этой статьи будут определены и добавлены две функции промежуточного программного обеспечения для приложения: одна называется myLogger, которая печатает простое сообщение журнала, а другая - requestTime 1, которая отображает временную метку HTTP-запроса.
Функция промежуточного ПО myLogger
Вот простой пример функции промежуточного программного обеспечения под названием «myLogger». Эта функция просто печатает «LOGGED», когда через него проходит запрос к приложению. Функция промежуточного программного обеспечения назначается переменной с именем myLogger.
Чтобы загрузить функцию промежуточного программного обеспечения, вызовите app.use () , указав функцию промежуточного программного обеспечения. Например, следующий код загружает функцию промежуточного программного обеспечения myLogger перед маршрутом к корневому пути (/).
Каждый раз, когда приложение получает запрос, оно выводит сообщение «LOGGED» на терминал.
Порядок загрузки промежуточного программного обеспечения важен: функции промежуточного программного обеспечения, которые загружаются первыми, также выполняются первыми.
Если myLogger загружается после маршрута к корневому пути, запрос никогда не достигает его, и приложение не выводит «LOGGED», потому что обработчик маршрута корневого пути завершает цикл запрос-ответ.
Функция промежуточного программного обеспечения myLogger просто печатает сообщение, а затем передает запрос следующей функции промежуточного программного обеспечения в стеке, вызывая функцию next () .
источник
===== Очень очень простое объяснение =====
Промежуточное программное обеспечение часто используется в контексте платформы Express.js и является фундаментальной концепцией для node.js. Короче говоря, это в основном функция, которая имеет доступ к объектам запросов и ответов вашего приложения. Я бы хотел подумать об этом - это серия «проверок / предварительных проверок», через которые проходит запрос, прежде чем он будет обработан приложением. Например, Middlewares было бы целесообразно определить, аутентифицирован ли запрос до того, как он поступит в приложение, и вернуть страницу входа в систему, если запрос не аутентифицирован, или для регистрации каждого запроса. Доступно множество сторонних промежуточных программ, обеспечивающих различные функциональные возможности.
Простой пример Middleware:
Приведенный выше код будет выполняться для каждого входящего запроса и будет регистрировать URL-адрес запроса, метод next () по существу позволяет программе продолжаться. Если функция next () не вызывается, программа не будет продолжать работу и остановится при выполнении промежуточного программного обеспечения.
Несколько промежуточных программных Gotchas:
источник
next()
ноreturn next()
. В чем разница?next()
потому, что хотим, чтобы было вызвано следующее промежуточное ПО, я не думаю,next()
илиreturn next()
, должно быть, что-то изменилось! Тем не менее, это зависит от того, что код ...Промежуточное программное обеспечение - это функции, выполняемые посередине после того, как вход / источник генерирует выходной сигнал, который может быть конечным выходом или может использоваться следующим промежуточным программным обеспечением до завершения цикла.
Это похоже на продукт, который проходит через сборочную линию, где он изменяется по мере продвижения, пока не будет завершен, оценен или отклонен.
Промежуточное программное обеспечение ожидает, что какое-то значение будет работать (т.е. значения параметров), и на основе некоторой логики промежуточное программное обеспечение будет вызывать или не вызывать следующее промежуточное программное обеспечение или отправлять ответ клиенту.
Если вы все еще не можете понять концепцию промежуточного программного обеспечения, это похоже на шаблоны декоратора или цепочки команд.
источник
Промежуточное программное обеспечение - это подмножество связанных функций, вызываемых слоем маршрутизации Express js до вызова пользовательского обработчика. Функции промежуточного программного обеспечения имеют полный доступ к объектам запросов и ответов и могут изменять любой из них.
Цепочка промежуточного программного обеспечения всегда вызывается в точном порядке, в котором она была определена, поэтому крайне важно, чтобы вы точно знали, что делает конкретная часть промежуточного программного обеспечения.
По завершении функции промежуточного программного обеспечения она вызывает следующую функцию в цепочке, вызывая ее следующий аргумент как функцию.
После выполнения всей цепочки вызывается обработчик пользовательских запросов.
источник
Держите вещи простыми, чувак!
Примечание. Ответ относится к встроенным программным продуктам ExpressJS, однако существуют разные определения и варианты использования промежуточного программного обеспечения.
С моей точки зрения, промежуточный слой выступает в качестве полезных или вспомогательных функций , но его активация и использование полностью необязательно , используя
app.use('path', /* define or use builtin middleware */)
который не хочет от нас , чтобы написать код для выполнения очень общих задач , которые необходимы для каждого запроса HTTP нашего клиента например, обработка куки, токены CSRF и ..., которые очень распространены в большинстве приложений, поэтому промежуточное ПО может помочь нам сделать все это для каждого HTTP-запроса нашего клиента в некотором стеке, последовательности или порядке операций, а затем представить результат процесса как единая единица клиентского запроса .Пример:
Прием запросов клиентов и предоставление ответных ответов на них в соответствии с их запросами является природой технологии веб-сервера.
Представьте, что мы отвечаем просто "Привет, мир!" Текст для запроса GET HTTP к корневому URI нашего веб-сервера является очень простым сценарием и больше ничего не требует, но вместо этого, если мы проверяем текущего пользователя, вошедшего в систему, а затем отвечаем «Hello, Username!» в этом случае нам нужно нечто большее, чем обычно, в этом случае нам нужно промежуточное программное обеспечение для обработки всех метаданных запроса клиента и предоставления нам идентификационной информации, полученной из запроса клиента, а затем в соответствии с этой информацией мы можем однозначно идентифицировать нашего текущего пользователя и получить возможность ответить на него / ее с некоторыми связанными данными.
Надеюсь, это поможет кому-то!
источник
В самом простом термине, если я хочу объяснить это так, я узнаю это из ускоренного курса traversymedia youtube channel.
Итак, промежуточное ПО - это функция, которая выполняется после того, как вы выполните вызов на ваш маршрут следующим образом.
Эта функция ведения журнала выполняется каждый раз, когда вы обновляете свою страницу, что означает, что вы можете написать в ней все, что вам нужно сделать после того, как на вашей странице будет обработан любой вызов API api, сбросить все, что угодно. и поместите это промежуточное ПО до того, как ваш порядок маршрутизации промежуточного ПО будет действительно важным, или он не будет работать
источник