Méthode de substitution dans node.js

Je cherche le meilleur moyen de remplacer une méthode dans un module personnalisé, node.js.

Je travaille sur un middleware personnalisé qui m’aidera à charger automatiquement un module personnalisé. Comme la sécurité, les utilisateurs, etc.

Mais je veux être capable de remplacer certaines méthodes si j’ai besoin de quelque chose comme une vérification manuelle de sécurité. Pour l’instant, le seul moyen que j’ai trouvé est d’exporter une fonction qui remplacera ma méthode et exposera les variables de contexte.

// CUSTOM MODULE EXAMPLE // ======================================== var myVar = "Hello "; var myVar2 = "!"; var method = function() { return "world" + myVar2; } module.exports.loadModule = function() { console.log(myVar + method()); }; module.exports.overrideMethod = function(customMethod) { method = customMethod; }; module.exports.myVar2 = myVar2; 

Et mon application principale sera comme ça:

 // MAIN APP EXAMPLE // ======================================== var myCustomModule = require('customModule.js'); myCustomModule.overrideMethod(function() { return "viewer" + myCustomModule.myVar2; }); myCustomModule.loadModule(); 

Qu’est-ce que tu penses? Suis-je sur le bon chemin?

Merci d’avoir lu. À M

En général, je considère que tout module dont l’état global est mutable est une erreur. Au lieu de cela, je préférerais créer un object avec ces méthodes et avoir un moyen de passer les substitutions.

 // CUSTOM MODULE EXAMPLE // ======================================== var DEFAULT_PREFIX = "Hello "; var DEFAULT_SUFFIX = "!"; var DEFAULT_METHOD = function() { return "world" + DEFAULT_SUFFIX; }; module.exports = function(options){ var method = options.method || DEFAULT_METHOD return { loadModule: function(){ console.log(myVar + method()); } }; }; module.exports.DEFAULT_SUFFIX = DEFAULT_SUFFIX; 

Ensuite, vous pouvez utiliser ceci comme ceci:

 // MAIN APP EXAMPLE // ======================================== var myCustomModule = require('customModule.js'); var loader = myCustomModule({ method: function() { return "viewer" + myCustomModule.DEFAULT_SUFFIX; } }); loader.loadModule();