在路由快递中使用类

时间:2017-09-30 14:29:57

标签: javascript node.js express

我决定将代码从函数重写为类。但是,我遇到了这个问题,我的这个未定义

路由

// router.js

const ExampleController = require('./ExampleController');
const instanceOfExampleController = new ExampleController();

// Require express and other dependencies

app.post('/post-to-login', instanceOfExampleController.login) // An error appears inside the method

和控制器

// My Controller

class ExampleController {

// Private method
myPrivateMethod(info) {
    return info.toUpperCase();
}

login(req, res, next) {
    console.log('----------------------');
    console.log(this); // Here "this" equal of undefined!
    console.log('----------------------');
    const someValue = this.myPrivateMethod(req.body.info); // Not work!
    res.send(someValue);
 };
}

1 个答案:

答案 0 :(得分:3)

instanceOfExampleController.login.bind(instanceOfExampleController)会做到这一点。一旦直接调用该函数,该函数将失去其上下文。

或者,您可以使用:

app.post('/post-to-login', function (req, res, next) {
  instanceOfExampleController.login(req, res, next);
});