phzonta phzonta - 1 month ago 10
TypeScript Question

implement express controller class with typescript

I'm doing an express app with typescript.
The router code is:

let user = new User();
router.get("/", user.test);


the user class is

export class User {
test(req, res, next) {
// this === undefined
}
}


the problem is that the this object is undefined inside test method. Is there a better way to implement express routing?

Answer

You need to use the bind function to keep the scope of this when the method is invoked:

let user = new User();
router.get("/", user.test.bind(user));

Or you can do that in the User constructor:

export class User {
    constructor() {
        this.test = this.test.bind(this);
    }

    test(req, res, next) {
        ...
    }
}

Another option is to use an arrow function:

let user = new User();
router.get("/", (req, res, next) => user.test(req, res, next));