调用this.somemethod的passport.js引发TypeError:无法读取属性“ somemethod”

时间:2018-11-01 06:17:44

标签: 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, 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);
}

1 个答案:

答案 0 :(得分:0)

我想到了两种解决方法:

  1. 将ctrlAuth绑定到该方法:

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

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

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

    在ctrAuth.login内部,我致电next();