Семейство методов, таких как app.get()
, app.post()
, app.use()
, принимает любое количество обработчиков запросов в качестве последовательных аргументов:
app.get('/path', fn1, fn2, fn3, fn4);
Эти обработчики запросов можно использовать для различных целей. Часто это то, что обычно называют промежуточным программным обеспечением, которое подготавливает запрос к дальнейшей обработке или, в некоторых случаях, блокирует запрос от дальнейшей обработки. Но они также могут быть и обычными обработчиками запросов, они не ограничиваются только тем, что большинство людей называют промежуточным ПО.
В вашем конкретном случае:
app.get('/path', authUser, (req,res) => {
...
}
По имени можно догадаться, что authUser
проверяет, правильно ли аутентифицирован пользователь, делающий запрос, и, если нет, то, вероятно, в качестве ответа отправляется статус ошибки и следующий обработчик запроса в цепочке не называется. Или, наоборот, поскольку authUser уже отфильтровал всех неаутентифицированных пользователей, обработчик запросов здесь, в конце цепочки, может с уверенностью предположить, что пользователь уже аутентифицирован. Таким образом, это конкретное использование является средством применения промежуточного программного обеспечения к одному конкретному маршруту без каких-либо последствий для любых других маршрутов, определенных позже.
Но я хочу подчеркнуть, что это общий механизм, который не ограничивается только тем, что классически называют промежуточным программным обеспечением. Его также можно использовать для обработчиков запросов, которые могут выполняться условно на основе других параметров. Например, вот один такой пример, когда первый обработчик запроса просматривает URL-адрес и решает сам обработать весь запрос на основе того, что он видит в URL-адресе, и, если нет, передает его следующему обработчику:
app.get('/book/:id', (req, res) => {
// check if id is purely numeric
if (/^\d+$/.test(req.params.id)) {
// this is a request for a book by numeric id
// look up the book numeric id in the database and return the meta
// data about this book
} else {
// not a book id, let next request handler have the request
next();
}
}, (req, res) => {
// must be a book title lookup
// look up the book in the title database and return the id
});