He escrito una clase que puede cargar secuencias de comandos desde archivos en el tiempo de ejecución y luego puede ejecutar esas secuencias de comandos, esencialmente un sistema de complemento.
class Broker { constructor(){ this.requests = require("../../plugins/sync/core") } }Los scripts también importarán esta clase, ya que amplían las capacidades de la clase.
const { Broker } = require("../../core/Broker"); module.exports = { isConnectableNode: { minRole: 2, script: async (data) => { ... let node = Broker.findNode(data.nodeID); // ERROR: Broker is undefined ... }, },...El script se llama en esta función dentro de la clase Broker:
async handleRequest(handler, data, user) { try { if (this.requests[handler].minRole >= user.role) { const res = await this.requests[handler].script(data); return res; } else { return { status: 401, message: "Not authorized." }; } } catch (e) { return { status: 400, message: "Unknown Request." }; } } Lo que funciona es llamar a una función que establece this.requests desde handleRequest() cuando está vacío o no inicializado.
if (!this.requests) this.loadPlugins();Ahora todas las importaciones están correctamente cargadas y disponibles para los scripts.
¿Alguien sabe la razón por la que esto solo funciona cuando se requiere desde el cierre de la función del controlador y no el constructor o realmente en cualquier lugar externo?