我想重用我所有的服务和控制器,我通过扩展类来实现这一点。我从路由器一路调用控制器和服务的类。创建类的示例时一切看起来都很好,但当我发送请求登录路由时,它说没有this.servise或this.dto,这是我在创建对象的示例时传递给构造函数的第一个我回顾了我对nodejs模块工作原理的了解,但是我找不到问题出在哪里。请问谁能给我解释一下这个情况!?提前感谢!
dced5bon1#
当把对方法的引用传递给Express路由器时,你忘记了使用.bind(),所以当Express试图调用它们时,谁知道this的值会是什么(在JS中,this不像其他变量名那样工作,它不使用词法作用域,值会是什么取决于调用代码)。将代码更改为例如
.bind()
this
router.post('/signup', userController.signup.bind(userController));
这将确保在调用该函数时,this被设置为userController对象(bind()是一个可用于所有函数对象的方法,该方法返回一个具有固定this值的新函数)。
userController
bind()
1条答案
按热度按时间dced5bon1#
当把对方法的引用传递给Express路由器时,你忘记了使用
.bind()
,所以当Express试图调用它们时,谁知道this
的值会是什么(在JS中,this
不像其他变量名那样工作,它不使用词法作用域,值会是什么取决于调用代码)。将代码更改为例如
这将确保在调用该函数时,
this
被设置为userController
对象(bind()
是一个可用于所有函数对象的方法,该方法返回一个具有固定this
值的新函数)。