如何解决Express JS:在我的类中调用一个路由方法
我正在使用 Typescript 创建一个 MERN 应用程序。
我的班级这个有问题。
使用此代码段:
router.post("/create",user.createNewUser);
不可能在createNewUser函数内部调用user类的另一个方法。
如果我使用这个片段:
router.post("/create",(req: Request,res: Response,next: NextFunction) => {
try {
user.createNewUser(req,res,next);
} catch (error) {
res.json(error);
}
});
它工作正常。
这是我的功能:
createNewUser(req: Request,next: NextFunction) {
try {
const { password,username,email,id } = req.body;
const payload: object = { /* HERE MY JSON */ };
schema.create(payload,async(err: any,result: any) => {
const isSended = await this.sendRegistrationEmail(email);
if (err) throw err;
if (isSended) {
res.status(200).json(result);
} else {
res.status(500).json('error');
}
});
} catch (error) {
res.status(500).send(error);
}
};
错误是:
TypeError: 无法读取未定义的属性“sendRegistrationEmail”
我想知道为什么第一个解决方案不起作用,而第二个解决方案有效。
解决方法
this
关键字很棘手。基本上问题是当你这样做时
router.post("/create",user.createNewUser);
您只传递 createNewUser
函数的值,而不是整个用户。由于该函数现在只是一个浮动值而不是附加到 user
对象,因此 this
的值变为未定义。
解决办法是
router.post("/create",(...args) => user.createNewUser(...args));
或
router.post("/create",user.createNewUser.bind(user));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。