Wie funktioniert NodeJS?

  • Hallo Leute,


    ich arbeite gerade an einer Desktop App, wobei ich das Framework Electron benutzte. Soweit so gut. Allerdings ist das das erste mal, das ich aktiv mit NodeJS arbeite und habe einige Logik Fragen.


    Zunächst ist mir ein Problem aufgefallen was den grundsätzlichen Aufbau der Anwedung betrifft.

    Und zwar wie baut man so eine Anwendung vom HTML her grundsätzlich auf ist alles wasa in der Anwendung existiert in einer Datei und ich belnde dann einfach das entsprechende ein oder nutzt man normallerweise verschiedene HTML Dateien.


    Solle bei der vorherigen Frage letzteres zutreffen, stellt sich mir die Frage wie greife ich vom JavaScript auf NodeJS zu? Ich verstehe grundsätzlich nicht wie kann ich z.B. eine neue HTML File in die Anwendung laden wenn ich einen Button drücke. Da NodeJS sozusagen serverseitig ist und alles andere JS nicht stellt sich die Frage wie greife ich darauf zu?


    Auch ein Problem, das mir Kopfschmerzen bereitet sind JS Libarys (z.B. Toastr oder ChartJS) wenn ich sie über HTML <script> importiere funktionieren sie manchmal oder auch nicht jQuery und Bootstrap funktionieren so. Wenn ich aber Toastr über diese Methode importiere weiß JS auf einmal nicht was das ist und erkennt es erst wenn ich es mit NPM installiere? Warum das?

    If you are homeless ... just buy a house, duh!

    and if you wanna have a plugin matching your conditions ... just code it yourself!

    • Hilfreich

    Und zwar wie baut man so eine Anwendung vom HTML her grundsätzlich auf

    Das ist so gesehen komplett dir überlassen. Ich habe in meinen electron-Apps bisher immer auf Vue.js oder Angular zurückgegriffen, die sich dann um das Laden einer Datei kümmern (Stichwort Routing). So habe ich am Anfang eine kleine Datei, in der meine Scripts geladen werden, die dann wiederum mittels Routing die entsprechenden Unterseiten einfügen.

    Allerdings braucht man nicht zwingend ein solches Framework, es reicht eigentlich das eigene Wissen über JavaScript und wie man mit JavaScript Inhalte austauscht, bzw. aus Dateien lädt. Hier hilft vielleicht das Stichwort Browser History API.


    So gesehen kannst du also entweder alles in eine Datei schreiben, macht aber aufgrund der Möglichkeit, Seiten mittels JavaScript reinzuladen, wenig Sinn.


    wie greife ich vom JavaScript auf NodeJS zu?

    Erstmal ist das eine spezielle Frage, die nicht viel mit dem Problem, neue HTML-Dateien zu laden, hat. Node.js ist zwar serverseitig, dient hier aber eher dazu, auf Systemnahe Komponenten zugreifen zu können. Um da mal ein paar Beispiele zu nennen: Zugriff aufs Dateisystem (fs), Zugriff auf das Betriebssystem (OS) oder auch Dinge wie die Möglichkeit C++-Addons zu nutzen.


    Je nachdem, wie du nun vor hast deine Anwendung aufzubauen, kannst du entweder in electron einen extra Webserver starten. Soweit ich weiß, hat electron nämlich keinen eigenen. Dazu sollte erstmal das Node.js-Modul http genügen. Falls du was mehr brauchst, solltest du dir mal das Modul express anschauen. Alternativ legst du die HTML-Dateien in einen Ordner und bindest sie mit JavScript generell ein. Das geht, wie eben beschrieben mit der Browser History API ganz gut.


    Nun muss man zwischen zwei Fällen unterscheiden:

    Du nutzt einen Webserver in electron: Dann gehst du eher auf die Schiene, dass du keine direkte Kommunikation zwischen electron und JavaScript im Frontend brauchst. Du könntest mit einer Template-Engine die Dateien so rendern, dass sie die Inhalte anzeigen, die sie anzeigen sollen.

    Zweiter Fall ist die Nutzung eines Routing im Frontend: Hier könntest du dann mit etwas mehr Aufwand über den sogenannten IPC-Channel (Inter-Process Communication) kommunizieren. Ich nutze meist JSON-Objects, die die Daten beinhalten und dann eben Vue.js, um die Daten im Frontend zu verarbeiten. Da bist du dann aber frei.


    Natürlich kannst du auch den IPC-Channel in Fall 1 nutzen, um Inhalte zu ändern oder Ähnliches.


    Zu deiner letzten Frage kann ich dir leider nichts sagen, da ich mich nicht mit den genutzten Libraries auskenne und außerdem weder den Code, den du nutzt, noch einen Fehler habe, an dem man so in etwa herausfinden könnte, woran es scheitert.


    Mit freundlichen Grüßen

    Marc

  • OK da es meine erste Electron-App ist hab ich einfach mal jede menge gegoogelt und schließlich ein recht hilfreiches Tutorial gefunden. Habs mal verlinkt für zukünftige Suchende :D


    Dadurch habe ich erstmal die Verbindung hergestellt das IPC eines der Hauptmerkmale ist zum arbeiten zwischen Main und Renderer Thread. Nun funktioniert das erstmal so. Und sogar sehr schön.

    Was aber auch interessant klingt sind deine zwei Lösungsansätzte, einmal über nen Webserver oder über das Frontend Framework. Vue.Js hatte ich schon mal im Auge, hatte aber damals nicht so den Sinn dahinter gesehen, aber jetzt mit Electron macht das ganze in meinen Augen um einiges mehr Sinn.


    Werde ich mir bei Gelegenheit mal nochmal genauer anschauen.


    Danke für die Hilfe und die Denkanstöße :D

    If you are homeless ... just buy a house, duh!

    and if you wanna have a plugin matching your conditions ... just code it yourself!