这是我的route.js 文件,它处理所有路由。
// Import post controller
const PostController = require('../controllers/post');
// Call post controller for API
router.post('/posts', PostController.create);
然后 Controller 中有一个post.js文件,它导出Post类。
const PostModel = require('../models/post');
class Post
{
async create ()
{
response = {};
let posts = await PostModel.find({});
response.additionalInfo = this.getAdditionalInfo();
res.status(200).send({response});
}
getAdditionalInfo ()
{
// returns some data for users and something
}
}
module.exports = new Post();
现在我的问题是如何从 create 方法调用 getAdditionalInfo()
?因为如果我尝试 this.getAdditionalInfo()
我会收到 undefined
错误。
这就是create
的使用方式:
router.post('/posts', PostController.create);
最佳答案
与你的
router.post('/posts', PostController.create);
, router.post
正在接受名为 create
的函数作为回调。这意味着当它被调用时,例如,如果 router.post
的内部代码如下所示:
(url, callback) => {
on(someevent, () => {
callback();
});
}
缺少调用上下文。它没有调用 PostController.create()
,它只是调用 someCallbackVariableName()
。因此,如果没有调用上下文,create
内部的 this
就会成为 undefined
。
相反,可以传递一个使用正确的调用上下文调用 create
的函数:
router.post('/posts', () => PostController.create());
或者使用.bind
显式地将调用上下文设置为PostController
:
router.post('/posts', PostController.create.bind(PostController));
关于node.js - 这在 NodeJS 中是未定义的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51979777/