node.js - 这在 NodeJS 中是未定义的

标签 node.js ecmascript-6

这是我的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/

相关文章:

node.js - 快速 session 动态 cookie 域

node.js - 在 Mongoose 中合并两个文档的数组

javascript - ES6中使用Array类方法进行HTMLCollection DOM遍历

node.js - 检查nodejs中的继承

javascript - React 使用 .push 通过 onClick 添加到数组

javascript - 使用 spread 减少 es6 丢失的嵌套对象数组

javascript - 如何编译和评估对象上指定的逻辑运算符和操作数?

node.js - 使用node.js将Instagram图片保存到本地文件夹中

javascript - 有没有办法在成功加载内容后延迟发送 Discord 消息?

node.js - 无法在Windows 8.1上安装zombiejs