Node 中的 TypeScript 和 Express。无法使用构造函数设置控制器的类属性

Epi*_*tax 1 node.js express typescript

我有一个 Node 应用程序,其中 Express 使用 Babel 实现 TypeScript。

我尝试创建一个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 });
    }
}
Run Code Online (Sandbox Code Playgroud)

扩展类CrudController只是一个抽象类,但代码仍然如下:

export abstract class CrudController {
    public abstract get(req: Request, res: Response): void;
}
Run Code Online (Sandbox Code Playgroud)

这是我的路线文件:

const userController = new UserController();
router.route('/user')
  .get(userController.get);
Run Code Online (Sandbox Code Playgroud)

可能是什么问题?谢谢!

eol*_*eol 6

由于传递userController.get到路由器,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);
Run Code Online (Sandbox Code Playgroud)