【发布时间】: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 在控制器操作中可用。前两个日志工作正常,test1 和 test2。但是test3 会抛出一个错误,说 logger 未定义。
为什么this.logger 在后面的函数中没有定义?我该如何解决这个问题?
【问题讨论】:
-
尝试将
getComponents重构为箭头函数 -
谢谢你这样做,你能解释一下为什么修复它还是只是一些魔法?
getComponents = async (req, res) => -
如果您想让您的评论成为答案,我可以接受。
-
谢谢,发布答案
标签: node.js express express-router