В выражении того, как много обратного вызова работает в 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
}