我有一個 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在后面的函式中未定義?我該如何解決這個問題?
uj5u.com熱心網友回復:
嘗試重構getComponents為箭頭函式。
原因如下:https ://javascript.plainenglish.io/this-binding-in-es6-arrow-function-70d80e216238
你也可以這樣做:
router.get('/components', componentController.getComponents.bind(componentController));
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/492159.html
