Node.js passport.js调用this.somemethod抛出TypeError:无法读取属性';somemethod';

Node.js passport.js调用this.somemethod抛出TypeError:无法读取属性';somemethod';,node.js,typescript,passport.js,Node.js,Typescript,Passport.js,我从一个班级打电话给以下学生: router.post('/login', ctrlAuth.login); 那么ctrlAuth来自另一个类: login(req, res) { passport.authenticate('ldapauth', function (err, user, info) { ... // handling err and !user ... if (user) this.processUser(req, r

我从一个班级打电话给以下学生:

router.post('/login', ctrlAuth.login);
那么ctrlAuth来自另一个类:

login(req, res) {
    passport.authenticate('ldapauth', function (err, user, info) {
        ... // handling err and !user
        ...
        if (user) this.processUser(req, res);
    })(req, res);
}

private processUser(req, res) {...}
然后我得到TypeError:无法读取未定义的属性'processUser'

到目前为止,我是这样做的,但仍然不起作用:

login(req, res) {
    const callback = ((err, user, info) => {
        if (user) this.processUser(req, res);
    }).bind(this);
    passport.authenticate('ldapauth', {session: false}, callback)(req, res);
}

有两种方法可以解决这个问题:

  • 将ctrlAuth绑定到方法:

    router.post('/login',ctrlAuth.login.bind(ctrlAuth))

  • 创建另一个类并将其用作下一个回调:

    router.post('/login',ctrlAuth.login,ctrlAuth.processUser)

    在ctrAuth.login内部,我调用
    next()


  • 可能重复使用箭头函数代替标题更新了我的问题。实际上我试过const self=this;还有箭头函数和绑定(这个),但我无法让它工作。我最终解决了它。我在router.post('/login',ctrlAuth.login,ctrlAuth.processUser)中使用多个回调;在login方法中,我刚刚调用了next()