我上了两节课; authenticationRoutes.ts和authenticationController.ts。在authenticationRoutes中,我正在调用“ authenticationController.test”,“ authenticationController.test”方法将调用“ authenticationController.generateAccessAuthToken”方法。每当执行此操作时,都会出现以下错误:未处理的拒绝TypeError:无法读取属性'generateAccessAuthToken' 不确定的
error: conversion to non-scalar type requested
authenticationRoutes.ts
import { authenticationController } from '../controllers/authenticationController';
//TEST ROUTE
this.router.get('/users', authenticationController.test);
我希望能够做到我所描述的而不会收到错误。
答案 0 :(得分:1)
我认为这可以解决问题:
this.router.get('/users', authenticationController.test.bind(AuthenticationController));
基本上,当您拥有带有方法A
的类b
时,如果您像这样传递A.b
:
const a = new A();
const b = a.b;
b(); // now 'this' is lost, any reference to `this` in b() code would be undefined
您仅通过函数。现在它与A
类无关,它只是一个函数。
因此,除其他外,您可以使用bind
显式设置函数的this
上下文:
const a = new A();
const b = a.b.bind(a);
b(); // so now b() is forced to use a as this context
我敢打赌,关于您的问题有很多重复的内容,但我找不到快速的人,因为搜索很棘手(js中的this
绑定有很多问题)。
希望这会有所帮助。
答案 1 :(得分:0)
我遇到了同样的问题并解决了它:
public test = (req: Request, res: Response) => {
dbSequelize().User.findAll({
where: {
id: '0'
},
attributes: ['id']
}).then((user: UserInstance[]) => {
this.generateAccessAuthToken('0').then((response: any) => {
console.log(response);
res.send(response);
});
})
}