Express JS:在我的路由类中调用一个方法



我正在用Typescript创建一个MERN应用程序。

我有一些问题这个在我的课。

使用下面的代码片段:

router.post("/create", user.createNewUser);

不可能调用类user的另一个方法在函数createNewUser.

如果我使用这个代码片段:

router.post("/create", (req: Request, res: Response, next: NextFunction) => {
try {
user.createNewUser(req, res, next);
} catch (error) {
res.json(error);
}
});

It work right .

这是我的功能

createNewUser(req: Request, res: Response, 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: Cannot read property 'sendRegistrationEmail' of undefined

我想知道为什么第一个解决方案不起作用,而第二个解决方案起作用。

this关键字很棘手。基本上问题是当你执行

router.post("/create", user.createNewUser);

您只传递createNewUser函数的值,而不是整个用户。由于该函数现在只是一个浮动值,并且没有附加到user对象,因此this的值变得未定义。

解决方案是

router.post("/create", (...args) => user.createNewUser(...args));

router.post("/create", user.createNewUser.bind(user));

最新更新