在此代码中定义了回调的位置

时间:2018-08-01 13:15:31

标签: javascript node.js callback passport.js asynchronous-javascript

这是使用护照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)
    })
}))

在上面的代码中,完成了一个在多个地方使用的回调函数,但是我想知道这个(完成的)回调函数在哪里定义,我所看到的是将它作为参数传递然后调用,所以我的基本问题是如何知道此回调将执行的操作或在何处定义。它应该执行一些操作。那么在哪里定义呢?

4 个答案:

答案 0 :(得分:1)

  

我怎么知道此回调会做什么

护照文件应该告诉您需要了解的所有信息,以便正确使用它。

  

或在哪里定义

将源代码中的某处添加到passport

答案 1 :(得分:1)

您不必担心在哪里调用“完成”回调。

这是“护照”使用的内部回调

这是您告诉“护照”“登录操作”结果的代码方式

用户已通过验证吗?

  • 如果是,请使用error = null和用户数据调用回调
  • 如果没有,请调用错误回调

答案 2 :(得分:0)

Passport是基于连接的框架。 当您定义这样的中间件时,done是管道中的下一个功能。

例如,在快速路线中,我们可以使用这样的中间件。

app.use('/route', middleWare1, middleWare2,..., route)

现在中间件有点像这样定义

const middleWare1 = (req, res, next)=> {
    //do some work
    next()
}

如果调用next,它将转到下一个中​​间件。 done就是这样。它将req传递到管道中的下一个中间件。

并且节点具有在回调中将error作为第一个参数和data作为第二个参数传递的约定。

答案 3 :(得分:-1)

根据http://www.passportjs.org/docs/basic-digest/,您调用“完成”功能为用户提供护照。 如果您想知道功能的定义位置,可以阅读“ use”方法的源代码