首页 > 解决方案 > 带有 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);

可能是什么问题?谢谢!

标签: node.jstypescriptexpress

解决方案


由于您传递给路由器,一旦调用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);

推荐阅读