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);
}
有两种方法可以解决这个问题:
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()