我决定将代码从函数重写为类。但是,我遇到了这个问题,我的这个未定义
路由
// 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);
};
}
答案 0 :(得分:3)
instanceOfExampleController.login.bind(instanceOfExampleController)
会做到这一点。一旦直接调用该函数,该函数将失去其上下文。
或者,您可以使用:
app.post('/post-to-login', function (req, res, next) {
instanceOfExampleController.login(req, res, next);
});