В выражении того, как много обратного вызова работает в app.get

Я новичок в node, поэтому, пожалуйста, простите меня, если я не буду очевиден. В приложении node.js express для функции app.get мы обычно передаем маршрут и просматриваем как параметры например

app.get('/users', user.list);

но в примере с паспортом Google, я обнаружил, что они называют его

app.get('/users', ensureAuthenticated, user.list);

где makeAuthenticated - это функция

function ensureAuthenticated(req, res, next) {
    if (req.isAuthenticated()) { return next(); }
    res.redirect('/login')
}

Короче говоря, это означает, что есть несколько обратных вызовов, которые во время работы вызываются последовательно. Я попробовал добавить еще несколько функций, чтобы они выглядели как

app.get('/users', ensureAuthenticated, dummy1, dummy2, user.list);

и я обнаружил, что secureAuthenticated, dummy1, dummy2, user.list вызывается последовательно.

для моего конкретного требования я нахожу, что вызывающие функции последовательно в приведенной выше форме являются довольно изящным решением, а с использованием серии async. может кто-нибудь объяснить мне, как это работает, и как я могу реализовать аналогичную функциональность в целом.

Ответ 1

В Express каждый аргумент после пути вызывается последовательно. Обычно это способ внедрения промежуточного программного обеспечения (как вы можете видеть в примере, который вы указали).

app.get('/users', middleware1, middleware2, middleware3, processRequest);

function middleware1(req, res, next){
    // perform middleware function e.g. check if user is authenticated

    next();  // move on to the next middleware

    // or

    next(err);  // trigger error handler, usually to serve error page e.g. 403, 501 etc
}