在node.js中创建可重用控制器时类的示例出现问题

w51jfk4q  于 2022-12-03  发布在  Node.js
关注(0)|答案(1)|浏览(104)

我想重用我所有的服务和控制器,我通过扩展类来实现这一点。我从路由器一路调用控制器和服务的类。创建类的示例时一切看起来都很好,但当我发送请求登录路由时,它说没有this.servise或this.dto,这是我在创建对象的示例时传递给构造函数的
第一个
我回顾了我对nodejs模块工作原理的了解,但是我找不到问题出在哪里。
请问谁能给我解释一下这个情况!?
提前感谢!

dced5bon

dced5bon1#

当把对方法的引用传递给Express路由器时,你忘记了使用.bind(),所以当Express试图调用它们时,谁知道this的值会是什么(在JS中,this不像其他变量名那样工作,它不使用词法作用域,值会是什么取决于调用代码)。
将代码更改为例如

router.post('/signup', userController.signup.bind(userController));

这将确保在调用该函数时,this被设置为userController对象(bind()是一个可用于所有函数对象的方法,该方法返回一个具有固定this值的新函数)。

相关问题