Это фрагмент кода для аутентификации с использованием паспортов js, который выглядит следующим образом:
// Middleware
passport.use('local-login', new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true
}, function(req, email, password, done){
User.findOne({ email: email }, function(err, user) {
if (err) return done(err)
if (!user) {
return done(null, false, req.flash('loginMessage', 'No user has been found'))
}
if (!user.comparePassword(password)) {
return done(null, false, req.flash('loginMessage', 'Incorrect Username/Password'))
}
return done(null, user)
})
}))
В приведенном выше коде done - это функция обратного вызова, используемая в нескольких местах, но я хочу знать, где определена эта (выполненная) функция обратного вызова, я вижу, что она передается в качестве аргумента, а затем вызывается, поэтому мой основной вопрос как я могу узнать, что будет делать этот обратный вызов или где он определен. Предполагается совершить какое-то действие. Так где это определяется?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


how can I know what this callback will do
В паспортной документации должно быть указано все, что вам нужно знать нужно, чтобы использовать его должным образом.
or where is it is defined
Где-то в исходном коде к passport.
Вам не нужно беспокоиться о том, где вызывается обратный вызов "done".
Это внутренний обратный вызов, который используется "паспортом".
Это ваш код, способ сообщить «паспорту» результат «действия входа».
Пользователь верифицирован?
Паспорт - это структура, основанная на подключении.
Когда вы определяете промежуточное ПО, подобное этому, следующей функцией в конвейере является done.
Например, в экспресс-маршруте мы можем использовать подобное промежуточное ПО.
app.use('/route', middleWare1, middleWare2,..., route)
теперь промежуточное программное обеспечение как бы определено так
const middleWare1 = (req, res, next)=> {
//do some work
next()
}
Если вызывается next, он перейдет к следующему промежуточному программному обеспечению. done такой. Он передаст req следующему промежуточному программному обеспечению в конвейере.
И у узла есть соглашение о передаче error в качестве первого и data в качестве второго аргумента в обратном вызове.
В соответствии с http://www.passportjs.org/docs/basic-digest/ вы вызываете функцию «готово», чтобы предоставить пользователю паспорт. Если вы хотите знать, где определяется функция, вы можете прочитать исходный код метода «использовать».