这在 NodeJS 中是未定义的

paw*_*392 4 node.js ecmascript-6

所以这里是我的 route.js 文件,它处理所有的路由。

// Import post controller
const PostController = require('../controllers/post');

// Call post controller for API
router.post('/posts', PostController.create);
Run Code Online (Sandbox Code Playgroud)

然后控制器中有 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();
Run Code Online (Sandbox Code Playgroud)

现在我的问题是如何getAdditionalInfo()从 create 方法调用?因为如果我尝试this.getAdditionalInfo()我会undefined出错。

这是如何create使用:

router.post('/posts', PostController.create);
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 12

跟你的

router.post('/posts', PostController.create);
Run Code Online (Sandbox Code Playgroud)

,router.post正在接受一个名为create callback的函数。这意味着当它被调用时,例如,如果内部代码router.post如下所示:

(url, callback) => {
  on(someevent, () => {
    callback();
  });
}
Run Code Online (Sandbox Code Playgroud)

缺少调用上下文。这不是在打电话PostController.create(),只是在打电话someCallbackVariableName()。所以,如果没有呼叫情况下,this内部createundefined作为一个结果。

相反,要么传递一个使用正确调用上下文调用 的函数create

router.post('/posts', () => PostController.create());
Run Code Online (Sandbox Code Playgroud)

或者使用.bind将调用上下文显式设置为PostController

router.post('/posts', PostController.create.bind(PostController));
Run Code Online (Sandbox Code Playgroud)