Недавно я написал небольшой модуль контроля доступа для приложения.Бэк-энд - это узел с экспрессом.Модуль выглядит следующим образом
class Rbac {
constructor() {
if (!Rbac.instance) {
Rbac.instance = this;
}
this.rbacStructure = {};
this.init = this.init.bind(this);
this.checkPermission = this.checkPermission.bind(this);
this.checkPermissionSync = this.checkPermissionSync.bind(this);
this.checkPermissionMiddleware = this.checkPermissionMiddleware.bind(this);
this.doesPermissionExistInGroup = this.doesPermissionExistInGroup.bind(
this
);
this.instance = this;
return Rbac.instance;
}
.
.
.
.
.
.
const instance = new Rbac();
Object.freeze(instance);
export default instance;
В моем app.js я хочу передать экземпляр объекта маршрутизатору следующим образом
import Rbac from "./helpers/rbac";
import settingRouteExport from "./routes/settingRoutes";
const settingsRoutes = settingRouteExport(Rbac);
app.use("/settings", settingsRoutes);
И я пытаюсь использовать его в настройкахRoutes следующим образом
import express from "express";
const router = express.Router();
// Exporting the function that returns the router
export default (Rbac) => {
.
.
.
.
.
router.get(
"/users",
Rbac.checkPermissionMiddleware(["canCreateUser", "canEditUser"]),
UserControllers.getUsers
);
.
.
.
.
.
return router;
};
Несмотря на то, что я привязал функции класса к объекту, я получаю сообщение об ошибке ниже
TypeError: Cannot read property 'checkPermissionMiddleware' of undefined
Если я импортирую модуль непосредственно в маршрут, то всеработает как положено, я просто хочу знать, почему мои функции класса теряют контекст, даже если я связываю их в конструкторе.Есть ли способ предотвратить это?