Ich habe ein Hauptmodul (app.js), das einen Client initialisiert (um REST-API-Aufrufe auszuführen) und Funktionen in diesem Hauptmodul hat, die diesen Client verwenden. Da mein Code immer größer wird, möchte ich meine Hauptmodule modularisieren, indem ich die Funktionen in Module einfüge (zB module_A.js). Was ist die beste Vorgehensweise, um diesen Client für die verschiedenen Module initialisieren und freigeben zu lassen? Ein Weg, über den ich nachgedacht habe, ist ein Client-Modul zu erstellen, das ich in jedem Modul benötige - würde der Client dann nicht mehrfach initialisiert werden? ChristianGemeinsame Nutzung von Variablen über Knotenmodule hinweg
Antwort
Nein. Soweit ich weiß, ist ein Modul ein Singleton, so dass es nur einmal erstellt wird. Wenn ein anderes Modul require
das Modul module_A
ist, erhalten sie die bereits vorhandene Referenz darauf.
module_A.js
console.log("should only be called ONCE");
var module_object = {
shared_variable: "initial text"
};
module.exports = module_object;
caller1.js
var testmod = require("./module_A");
console.log("TEST IS:" + testmod.shared_variable);
testmod.shared_variable += " - included in caller1";
console.log("TEST IS:" + testmod.shared_variable);
caller2.js
var testmod = require("./module_A");
console.log("TEST IS:" + testmod.shared_variable);
testmod.shared_variable += " - included in caller2";
console.log("TEST IS:" + testmod.shared_variable);
Im Test über der Log-Zeile mit "ONCE" nur einmal aufgerufen werden soll , egal wie lange Ihr Server läuft.
Ich bin nicht sicher, wie oft es ausgeführt wird, wenn Sie mehrere Instanzen haben (wie in einem Cluster mit einer Instanz pr.cpu), aber Sie können testen, ob es notwendig ist.
Danke für Ihre Antworten. Nachdem ich ein wenig untersucht habe, denke ich, besteht die Lösung darin, jedes Modul (Modul_A, Modul_B usw.) mit dem Rest-Client zu initialisieren, der im Hauptteil erstellt wird. Das wäre so etwas sein:
in den wichtigsten app.js:
var apiClient = ... var module_A = require (‘./ modules/module_A.js') Test. init (apiClient);
in module_A.js
var client = null; exports.init = function init(aClient){ client = aClient; } exports.myFunction = function(callback){ client.doSomething(function(data){ ...
}); }
- 1. Gemeinsame Nutzung der Datenbank über mehrere Apps hinweg
- 2. TFS: Gemeinsame Nutzung einer einzelnen DLL über mehrere Projekte hinweg
- 3. Gemeinsame Nutzung von NSOperationQueue über View-Controller?
- 4. Statische Variablen über Sitzungen hinweg
- 5. Freigabe von Variablen über mehrere Sitzungen hinweg
- 6. Gemeinsame Nutzung von SSH-Schlüsseln
- 7. Gemeinsame Nutzung von Rails-Anwendungen?
- 8. Gemeinsame Nutzung von Docker-Clustern
- 9. Gemeinsame Nutzung von Ausgabeströmen über eine JNI-Schnittstelle
- 10. Gemeinsame Nutzung von Ressourcen über Komponententests und Instrumentierungstests in Android
- 11. Gemeinsame Nutzung von Dateien über azure serviceFabric-Dienste
- 12. Gemeinsame Nutzung von WSDL-Typen ohne XSD
- 13. Gemeinsame Nutzung derselben Variablen zwischen mehreren unabhängigen Programmen in Linux
- 14. Laich/1 und die gemeinsame Nutzung der äußeren Variablen
- 15. Gemeinsame Komponenten über mehrere React/Redux-Anwendungen hinweg
- 16. Gemeinsame Nutzung der Datalab-Notebooks
- 17. Gemeinsame Nutzung von Daten zwischen Ansichten
- 18. Gemeinsame Nutzung von Objekten zwischen PHP-Klassen
- 19. Gemeinsame Nutzung von CSS durch Ruby Gem
- 20. Gemeinsame Nutzung von Daten zwischen Silverlight ViewModels
- 21. Gemeinsame Nutzung eines Bildes von RecyclerView
- 22. Git + LaTeX + BitBucket: Gemeinsame Nutzung von Bilddateien
- 23. Gemeinsame Nutzung von Objekten in Java-Prozessen
- 24. Gemeinsame Nutzung von Daten zwischen den Richtlinien
- 25. Gemeinsame Nutzung von Daten zwischen Greasemonkey-Skripten
- 26. Gemeinsame Nutzung einer URL über Bluetooth (UIActivityViewController) nicht möglich
- 27. Gemeinsame Nutzung eines HttpRuntime.Cache über zwei IIS-Anwendungen
- 28. Gemeinsame Nutzung einer DataTable über mehrere Formulare in Winforms
- 29. RUNDECK-Freigabe von Variablen über Job-Schritte hinweg
- 30. Speichern von Variablen über mehrere Seiten hinweg mit localStorage?
Der beste Weg ist, separate Module zu erstellen, wie Sie bereits tun. Das ist der optimale Weg. Ja, ich glaube, wenn Sie den Client in einem separaten Modul initialisieren, wird er jedes Mal initialisiert, wenn er in verschiedenen Modulen aufgerufen wird. Warum initialisiere es nicht einfach im Code und weise es dem globalen Objekt im Knoten zu und der Zugriff ist überall gleich. wie global.clinst = neuer client(); und dann Zugriff über das Modul als global.clinst.getReq(); ist eine Lösung, die ich fühle. Fühlen Sie sich frei zu kommentieren. Es kann auch andere Wege geben, als könnten Sie es auf Router-Ebene initialisieren und dann den Funktionsaufruf übergeben. –