Есть два класса, класс LoginRoute и класс LoginController . Класс LoginRoute, приватная переменная типа LoginController, которая инициализируется как ожидалось. Тем не менее, когда вызывается объектная функция, возникает некоторое ошибочное поведение.
Дело A
Если объектная функция LoginController вызывается непосредственно из маршрутизатора, то объект, кажется, разрушается (не может ссылаться на this ).
Дело B
Если объектная функция LoginController вызывается в функции обратного вызова из маршрутизатора, то объект сохраняется (может ссылаться на this )
class LoginRoute {
private _loginController: LoginController
constructor () {
this._loginController = new LoginController()
}
get routes () : express.Router {
let router = express.Router()
// ******************* CASE A (Not working)*****************
router.post('/loginA', this._loginController.login)
// ******************* CASE B (Working)*****************
router.post('/loginB', (req : express.Request, res : express.Response) => {
this._loginController.login(req, res)
})
return router
}
}
Класс контроллера следующий:
class LoginController {
login(req: express.Request, res: express.Response):void {
console.log(req.body)
this.sample()
}
sample () {
console.log('Sample')
}
}
В обоих случаях / loginA и / loginB я ожидаю увидеть один и тот же вывод. Тем не менее, "this" должно быть неопределенным в A, при этом прекрасно работать в B. Экспресс-параметры req и res и проходить идеально.