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内部create是undefined作为一个结果。
相反,要么传递一个使用正确调用上下文调用 的函数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)
| 归档时间: |
|
| 查看次数: |
2710 次 |
| 最近记录: |