node.js - 带有 Express 的 Node 中的 TypeScript。无法使用构造函数设置控制器的类属性
问题描述
我有一个使用 Babel Express 实现 TypeScript 的 Node 应用程序。
UserController
我尝试使用私有属性创建一个_user: User
并将其设置在类构造函数中。问题是,我一直"message": "Cannot read property '_user' of undefined"
在输出。
这是我的课:
export class UserController extends CrudController {
private _user: User;
constructor() {
super();
const user = new User();
user.id = 1;
user.email = 'johnappleseed@apple.com';
user.firstName = 'John';
user.lastName = 'Appleseed';
this._user = user; // Setting the global class property
}
get(req: Request, res: Response) {
res.json({ user: this._user });
}
}
扩展类CrudController
只是一个抽象类,但代码如下:
export abstract class CrudController {
public abstract get(req: Request, res: Response): void;
}
这是我的路线文件:
const userController = new UserController();
router.route('/user')
.get(userController.get);
可能是什么问题?谢谢!
解决方案
由于您传递给路由器,一旦调用userController.get
路由器,您将失去类的-context。this
binding
您可以通过方法来解决此问题userController
,从而设置this
为控制器(有关更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind):
const userController = new UserController();
router.route('/user')
.get(userController.get.bind(userController);
推荐阅读
- dialogflow-es - 如何触发意图用户免费输入
- javascript - 在 React JS 中出错时用默认图像替换图像的最佳方法是什么
- php - 用数组填写时间表
- c# - 引入 FOREIGN KEY 约束可能会导致循环或多个级联
- numpy - 什么 kotlin 包提供了 numpy 功能?
- docker - 在 Debian docker 镜像结果中运行 gdb
- python - 无法使用请求模块解析网页中的电话号码
- python - 如何解决 OSError: [Errno 24] 使用 aiohttp 使用三个不同的 URL 执行 POST 调用时打开的文件过多?
- javascript - A11y 响应式菜单
- selenium - 无法使用 OpenVPN(虚拟专用网络)运行 Selenium Grid 脚本