【问题标题】:Node.js Route to Controller not applying Controller constructorNode.js 路由到控制器不应用控制器构造函数
【发布时间】:2022-06-16 22:38:26
【问题描述】:

我有一个 express.js 应用程序,它使用 express.Router() 将我的端点连接到控制器。

我的目标是在控制器构造函数中更新一个对象,这样我就可以在所有控制器函数中使用它,而不必在每个控制器函数中都更新它。

构造函数运行正确,并且对象在构造函数中可用。但是每当我调用控制器的任何动作时,对象都是空的。

这是路由器

const express = require('express');
const componentController = require('../controllers/component');

const router = express.Router();

// component routes
router.get('/components', componentController.getComponents);

module.exports = router;

这是我的控制器。

const LogService = require('../services/logService');

class ComponentController {
    constructor() {
        this.logger = new LogService('ComponentController');
        this.logger.logDebug('test1','test1');
    }

    async getComponents(req, res) {
        const test = new LogService('ComponentController');
        test.logDebug('test2','test2');

        this.logger.logDebug('test3','test3')
        res.json('');
    }
}

module.exports = new ComponentController();

我希望 LogService 在控制器操作中可用。前两个日志工作正常,test1test2。但是test3 会抛出一个错误,说 logger 未定义。

为什么this.logger 在后面的函数中没有定义?我该如何解决这个问题?

【问题讨论】:

  • 尝试将getComponents重构为箭头函数
  • 谢谢你这样做,你能解释一下为什么修复它还是只是一些魔法? getComponents = async (req, res) =>
  • 如果您想让您的评论成为答案,我可以接受。
  • 谢谢,发布答案

标签: node.js express express-router


【解决方案1】:

尝试将getComponents 重构为箭头函数。

原因如下:https://javascript.plainenglish.io/this-binding-in-es6-arrow-function-70d80e216238

你也可以这样做:

router.get('/components', componentController.getComponents.bind(componentController));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 2013-11-04
    • 2011-05-21
    • 1970-01-01
    相关资源
    最近更新 更多