Ответ 1
Экспресс использует функции промежуточного программного обеспечения, которые имеют обратные вызовы (функции, вызываемые при завершении действия), и следующая имеет эту цель (это обратный вызов, который запускает следующее промежуточное программное обеспечение в стек Express). Все промежуточное ПО Express (совместимое с Connect) имеют 3 параметра: запрос, ответ, следующий (что необязательно).
Например, статическое middlware обслуживает статические файлы, промежуточное программное обеспечение csrf проверяет наличие параметра при получении запросов POST и промежуточного программного обеспечения маршрутизатора, которое обрабатывает маршруты (то, что вы вставили выше, является частью этого).
Каждое промежуточное программное обеспечение может выполнить эту задачу и вызвать промежуточное ПО next
в очереди, если выполняются некоторые условия (например, статическое промежуточное ПО не будет вызывать следующее промежуточное ПО, поскольку оно будет заботиться о себе, чтобы обслуживать файлы, так что маршрутизатор не будет вызван).
В маршрутизаторе вы обычно не вызываете next
, потому что он имеет тенденцию быть последним промежуточным программным обеспечением (если вы не хотите что-то вроде бенчмаркинга).
Если вы хотите создать промежуточное программное обеспечение, которое запрещает доступ ко всем пользователям, которые не вошли в систему, вам придется вызывать next()
только в том случае, если пользователь вошел в систему (чтобы вызывалось следующее промежуточное программное обеспечение, маршрутизатор в этот случай и пользователь может получить доступ к странице, которую они ищут), иначе вы, вероятно, перенаправите их на страницу входа.
next
принимает либо никаких параметров вообще, либо ошибку в качестве параметра.
Изменить: на основе вашей конфигурации маршрутизатор находится перед статическим промежуточным программным обеспечением, поэтому, если вы хотите, чтобы файлы были поданы, вам нужно объявить маршрут подстановки, который вызывает next(), когда маршрут не сопоставляется:
app.get('*', function (req, res, next) {
// no route is matched
// so call next() to pass to the static middleware
next();
});
Примечание. Я не рекомендую ставить статический файловый сервер после маршрутизатора, я предлагаю вам поставить его раньше, чтобы вы могли определить свои собственные 404 маршрута.