Grundfrage JS - Server und Konfiguration

Sunfloraa

Grünschnabel
Hallo liebes Forum

Ich bin total neu hier und möchte mal kurz mein grosses Anliegen schildern. Ich hoffe ich bin in diesem Teil halbrichtig da mein Anluegen viele Aspekte miteinbeziehen. :)

Ich möchte in meinem beruflichen Umfeld weg von MS Access als Frontend kommen und zu JS wechseln. Warum JS? Die gesamte Möglichkeiten - sprich besonders FE Design gefällt mir ungemein gut. Mein Ziel ist es via ... Election eine Desktopapp zu erstellen welche Firmennetzintern auf die DB zugreift, normal DS auslesen, editieren, einfügen usw.

Nach mehreren Stunden nachforschen habe ich bisher folgende Fragen nicht beantworten können:
- Mein Server läuft derzeit mit MariaDB, phpmyadmin zum konfigurieren, ist Windows Server 2012. Was muss alles am Server noch gemacht werden damit ich im intern auf die DB zugreifen kann sprich:
- Wie läuft allgemein der Datenaustausch von FE zu BE in der JS Welt?
- Welches Framework wäre zu empfehlen für den Einstieg?

Was ist derzeit:
- Windows Server 2012 mit MariaDB/phpmyadmin
- MS Access als Frontend verbunden via ODBC Treiber. (IP-Adresse pw usw.)

Sicherheitsaspekte können ausgelassen werden da alles hinter einer Firewall passiert. (bezüglich SQL-Injection usw.)

Ich wäre für jegliche Inputs, Ratschläge und Links total offen. Natürlich auch über Belehrungen. ;)

Hinweis: Mir ist total bewusst, dass das nicht innerhalb von Monaten aufgestellt ist und das dies in FSD geht. Will einfach klein anfangen und mich Schritt für Schritt vorwärts bewegen. Zeit habe ich in unmengen genug zur Verfügung. :)

Liebe Grüsse <3
 
Hallo Sunfloora und willkommen im Forum!

- Mein Server läuft derzeit mit MariaDB, phpmyadmin zum konfigurieren, ist Windows Server 2012. Was muss alles am Server noch gemacht werden damit ich im intern auf die DB zugreifen kann sprich:
- Wie läuft allgemein der Datenaustausch von FE zu BE in der JS Welt?
- Welches Framework wäre zu empfehlen für den Einstieg?
1. Soll deine Electron-Desktop-Applikation nur auf die Datenbank zugreifen können oder gibt es noch mehr Dinge, die auf deinem Server geschehen müssen? Falls nein, könnte sich deine Electron-App direkt mit dem MariaDB-Server verbinden, d.h. dazu müsstest du nur die Firewalls entsprechend konfigurieren, dass ein Zugriff erlaubt ist.

2. Allgemein hast du "Frontend <-> {HTTP|JSON|REST|...} Schnittstelle auf dem Server <-> Datenbank", wobei die hinteren zwei Backend genannt werden. Normalerweise hat man die Schnittstelle in der Mitte, um zusätzliche Logik auszuführen oder allgemein auch aus dem Grund, dass nur autorisierte Applikationen (bzw. mit autorisierten Nutzeraccounts) Daten einsehen oder ändern dürfen. Ganz pragmatischer kann man es auch so sehen, dass man eine Schicht dazwischenschiebt, um einen Abstraktionsgrad zu gewinnen, denn das Frontend muss sich nicht darum kümmern, dass die Daten aus einer Datenbank stammen, sondern nur, dass es Daten sind.

3. Das kommt sehr darauf an, was genau für eine Applikation das werden soll. Ich arbeite zur Zeit bei mehreren Projekten mit Angular (und mit Angular CLI als auch mgechev/angular-seed), einfach weil dahinter eine größere Firma und Nutzerbasis steckt, sodass es anscheinend nicht so schnell eingeht, aber auch, weil ich damit schon Erfahrung habe. Angeblich soll aber Vue.js aktuell angesagter sein, du kannst es dir ja auch mal ansehen.

Sicherheitsaspekte können ausgelassen werden da alles hinter einer Firewall passiert. (bezüglich SQL-Injection usw.)
Dieses Argument zählt für mich leider nicht, vielleicht überzeugen dich folgende Gegenfragen:
- Wieso traust du allen Nutzern?
- Wieso gehst du davon aus, dass deine Software nie außerhalb betrieben wird? Auch unter dem Stichwort Wiederverwendbarkeit des Codes.
- Was, wenn die Firewall versagt?
 
Hallo ComFreek

Vielen Dank für deine Antwort. :)

Zu Punkt 1: Ansich ja, MariaDB sollte mit mehreren Connections zurecht kommen, ich peile da mal 100 Verbindungen mal als absolutes maximal in weiter weiter weiter ferne. Muss dafür mehr eingerichtet werden? Nun MariaDB benutzt den Port 3306 welches in der Firewall dafür aufgemacht wurde, wie würde da eine Verbindung entstehen, hättest du da evtl. einen Link mit einem kleinen tutorial? (Mein Ziel ist erstmal einfach eine Verbindung zu etablieren)

Zu Punkt 2: Wäre so eine Schicht evtl. Laravel oder node.js?

Zu Punkt 3: Daraus sollte ein Client werden welche Daten eingegeben werden, verändert und auch noch in 10 Jahren vorhanden sein sollen, mit sehr vielen kleinen Miniteile wie Kundenstamm, Words generieren, Mails versenden, Excel generiert und wieder importieren kann usw. Von Vue.js habe ich auch schon vieles gelesen, besonders die Einstiegsfreundlichkeit sei enorm hoch. Vielen Dank für deinen Input. Nehme ich gerne zu Herzen und werde ich mir genauer anschauen. :)

Ich traue ansich keinem User per se, nur kein User beherrscht bei weitem die nötigen Skills um einen SQL-Injection durchzuführen. Über die Verwendbarkeit des Codes hast du mich, dieser Punkt ist mir wichtig da ich gerne mit Snippets arbeite, notiere ich mir auf.

Vielen Dank für deine Bemühungen. :)

Liebe Grüsse
 
nur kein User beherrscht bei weitem die nötigen Skills um einen SQL-Injection durchzuführen
Bis einer mal ein Hochkomma in ein Kommentarfeld eingibt und es schiesst...

Benutzereingaben abzusichern gehört zum kleinen 1x1 eines jeden Entwicklers und wenn mans gleich richtig macht ist es weniger Aufwand. Security nachträglich einzufügen ist meiner Erfahrung nach mit viel Schweiss und Tränen verbunden.

Grüsse,
BK
 
wie würde da eine Verbindung entstehen, hättest du da evtl. einen Link mit einem kleinen tutorial? (Mein Ziel ist erstmal einfach eine Verbindung zu etablieren)
Nachdem deine Electron-App auf Node.js am lokalen Rechner läuft, ist "Node.js" das Stichwort für alles, was mit "normalem" JS in der Browsersandbox nicht möglich ist (Dateizugriff, erweitertet Netzwerkzugriff). In der Tat liefert "Node.js MariaDB" einige Resultate.

Ich weiß nicht, wie vertraut du mit dem Node.js Ökosystem bist, deswegen hier eine kurze Einführung: Für Code, den man als wiederverwendbare Bibliothek veröffentlichen möchte, wird ein "NPM Package" erstellt. NPM (https://npmjs.com) ist die offizielle Paketzentrale, auf der fast alle NPM Packages zu finden sind und die fast jeder benutzt. Obige Google-Suche ergab z. B. das Package https://www.npmjs.com/package/node-mariadb.
Ich würde empfehlen, immer auf die pro Package angegebenen Statistiken einen Blick zu werfen: wie viele "weekly Downloads", "open issues", "pull requests" und ganz wichtig "last publish". Das eben verlinkte Package wurde zuletzt vor 5 Jahren (!) aktualisiert, da würde ich unbedingt Abstand halten, insbesondere bei DB Client Software.
Das Datum der letzten Aktualisierung ist aber nicht immer ausschlaggeben, z. B. gibt es auch Packages, die bei Strings bestimmte Operationen ausführen (etwa padLeft, padRight). Bei diesen Packages kann die letzte Aktualisierung ruhig ein wenig her sein, es kann sich bei Strings ja nicht viel ändern.

Zu Punkt 2: Wäre so eine Schicht evtl. Laravel oder node.js?
Genau!

Zu Punkt 3: Daraus sollte ein Client werden welche Daten eingegeben werden, verändert und auch noch in 10 Jahren vorhanden sein sollen, mit sehr vielen kleinen Miniteile wie Kundenstamm, Words generieren, Mails versenden, Excel generiert und wieder importieren kann usw.
Eventuell benötigst du gar keine Electron-App, sondern einfach nur eine ganz normale Website.
  • Muss dein Programm Daten (Einstellungen) auf dem lokalen PC speichern? Oder lassen sich diese auch mit dem Nutzeraccount auf dem Server synchronisieren?
  • Wie genau möchtest du Mails versenden? Über welchen Mail Server?
Ein großer Vorteil wäre, dass du ganz leicht aktualisierte Fassungen deines Programms ausliefern kannst, weil du eine kontrollierende Instanz hast, den Server. Bei Electron-Apps gibt es natürlich auch Updater-Bibliotheken, die alles für dich abwickeln, trotzdem hast du eine gewisse Kopplung an das Betriebssystem-Ökosystem. Insbesondere wenn du 10 Jahre an Existenz anpeilst, würde ich dir das Web empfehlen, dessen Abwärtskompatibilität doch bemerkenswert ist ;)
 
Hallo ComFreek

Vielen Dank für deine Antwort.

Nachdem deine Electron-App auf Node.js am lokalen Rechner läuft, ist "Node.js" das Stichwort für alles...
Verstehe ich dich richtig, dass der Weg "Electron mit vue.js/html/css" als Frontend und "node.js mit mariadb" als Backend die anzustrebende Lösung ist?

Eventuell benötigst du gar keine Electron-App, sondern einfach nur eine ganz normale Website.
Hmm... ich würde definitiv eine lokale App bevorzugen da der native Eindruck besser rüberkommt und vom look and feel möchte ich schon Twitch oder Discord App anstreben, gefällt mir einfach. :)

Muss dein Programm Daten (Einstellungen) auf dem lokalen PC speichern? Oder lassen sich diese auch mit dem Nutzeraccount auf dem Server synchronisieren?
Soweit bin ich mit meinen Gedanken noch gar nicht, ich sehe da Serverseitig mehr Vorteile.

Wie genau möchtest du Mails versenden? Über welchen Mail Server
Sollte einen Outlook-Exchange Server sein und da kommt genau der Knackpunkt, wenn die GIT dies nicht zulässt müsste ich auf die Objekte vom Outlook Client zugreifen können um Mails zu versenden. Ist immer so ein Kampf mit denen zwischen Sicherheit und Komfort.

Was haltest du/ihr davon?

Liebe Grüsse :)
 
Verstehe ich dich richtig, dass der Weg "Electron mit vue.js/html/css" als Frontend und "node.js mit mariadb" als Backend die anzustrebende Lösung ist?
Ja, diesen Weg würde ich auch gehen. Du kannst beim Backend selbstverständlich eine andere Technologie als Node.js einsetzen, aber wenn du beim Frontend sowieso JS einschätzt, würde ich dabei bleiben.

Übrigens würde ich auch gleich TypeScript einsetzen, reines JS ohne Typen nutze ich nur noch sehr selten - eben wegen fehlendes Typsystems. Vue.js hat auch TypeScript Unterstützung out-of-the-box (siehe https://vuejs.org/v2/guide/typescript.html). Nebenbei bemerkt ist Angular auch selbst in TypeScript geschrieben.
Ich bin mir aber nicht ganz sicher, ob ich dir gerade einen riesigen Haufen von Technologiestack aufschwatze :D Meiner Meinung nach ist die Nutzung von TypeScript aber kein großer Sprung, denn fast jedes valide JS-Skript ist auch TypeScript-valide, von daher kannst du fließend wechseln und z. B. für den Anfang auch nur einen Teil deiner Applikation getypt haben.

Hmm... ich würde definitiv eine lokale App bevorzugen da der native Eindruck besser rüberkommt und vom look and feel möchte ich schon Twitch oder Discord App anstreben, gefällt mir einfach. :)
Alles klar! Ich würde noch empfehlen, den reinen UI-Bereich mit seiner Serverinteraktionslogik (zum Backend) getrennt von dem Bereich zu gestalten, welcher native Node.js-Funnktionen aufruft.
Wenn du diese Abstraktionsschicht hinbekommst, kannst du später viel einfacher von einer Electron-App auf eine Website oder gar eine Smartphone-App wechseln.

Sollte einen Outlook-Exchange Server sein und da kommt genau der Knackpunkt, wenn die GIT dies nicht zulässt müsste ich auf die Objekte vom Outlook Client zugreifen können um Mails zu versenden. Ist immer so ein Kampf mit denen zwischen Sicherheit und Komfort.
Für was steht GIT? Ist das dein firmeninterner Mailserver?
(Ich nehme mal an, dass es sich hier nicht um die Versionsverwaltung handelt.)
 
Hallo ComFreak

Übrigens würde ich auch gleich TypeScript einsetzen, reines...
Da werde ich mich gerne einlesen, TypeScript auf meiner learning-Liste hinzugefügt. :)

Alles klar! Ich würde noch empfehlen, den reinen UI-Bereich mit seiner Serverinteraktionslogik (zum Backend)
Das verstehe ich ehrlich gesagt nicht so ganz, könntest du das näher erläutern bzw. einfach mal ein minikleines Beispiel bringen?

Für was steht GIT?
Oh stimmt, dies bezeichnet bei uns die Group IT. Outlook / sprich komplett O365 / wird hart abgegrenzt, daher setze ich da eher auf das Objektmodell von Outlook, ist zwar unschön da man Outlook installiert und offen haben muss, aber es ist ein - für mich - akzeptabler Umweg/Sonderlösung. Dies sollte mit JS möglich sein oder?

Liebe Grüsse :)
 
Das verstehe ich ehrlich gesagt nicht so ganz, könntest du das näher erläutern bzw. einfach mal ein minikleines Beispiel bringen?
Sagen wir, dass du Mails wirklich mit einer Fernsteuerung von der Outlook Desktopapplikation versenden möchtest. Hierbei ist irrelevant, wie das geschieht, wichtig ist, dass das eine Kopplung zum Betriebssystem und zum ausgelieferten Ökosystem (sprich Electron-Umgebung vs. Browser-Umgebung) bedeutet. Das hat nichts mit der grafischen Oberfläche zu tun, sollte ergo getrennt werden.
In Code etwa:
Javascript:
function sendMailViaOutlook(recipient: string, sender: string, …) {
  // Jetzt wird z.B. Outlook via "Outlook.exe" geöffnet und ferngesteuert
  // (oder zumindest eine API benutzt, die das Versenden mit dem lokalen Outlook-Programm umsetzt)
}
// Komponente mit UI-Logik
class MyComponent {
  public sender: string;
  public recipient: string;

  public send() {
    // Schlecht: zu starke Kopplung
    sendMailViaOutlook(this.recipient, this.sender, …);
    // Besser, wobei MailProvider von sendMailViaOutlook wegabstrahiert, sodass
    // es im Zweifel auch durch eine API deines Backends ersetzt werden könnte
    MailProvider.send(this.recipient, this.sender)
  }
}
Und das Template (=die UI, welche Data Binding mit dem Controller hat im Angular Sprech) dazu:
HTML:
<input type="text" [(ngModel)]="sender" />
<input type="text" [(ngModel)]="recipient" />
<button (click)="send()">Send!</button>

Dies sollte mit JS möglich sein oder?
Du meinst via Node.js auf das Objektmodell von Office 365? Welche APIs stehen denn da grundlegend zur Verfügung? Ich vermute, dass das .NET sein wird. Du könntest nach einem passenden NPM Package suchen und falls es solch eins noch nicht gibt nach einem Weg, .NET über Node.js anzusteuern. Allgemein sind die meisten NPM Pakete zwar auch in JS, können aber auch nativ in C sein, was dann dir alles auf deinem Rechner erlaubt.

Falls es solch eine Brücke zwischen Node.js und .NET auch nicht gibt, würde ich über ein kleines selbstgewählte Interface in C# oder PowerShell (beide können ja .NET Bibliotheken ansprechen) nachdenken, welches mit Node.js z. B. ganz einfach über die Standardeingabe stdin kommuniziert.
In Node.js rufst du dann etwa "sendmail.exe" auf und schreibst auf stdin deine Mail.

(Beachte, dass Node.js in diesem Thema einmal für das Node.js stehen kann, was hinter deiner Electron-App läuft, oder jenes Node.js, welches für das Backend am Server läuft. In diesem Beitrag habe ich ausschließlich Ersteres gemeint :))
 
Hallo ComFreek

Vielen Dank für deine Antwort. :)

Ich sehe Typescript hast du echt verinnerlicht. ;) Was hat Typescript eigentlich für Vorteile? Ich sehe hier starke Gemeinsamkeiten mit C#, Vorteile ansich nicht weil Typescript-Code immer geparst werden muss?

Eine Frage habe ich noch, was alles sollte auf dem Node.js - Server ausgelagert werden? Derzeit sehe ich das Management jeglicher Anfragen als sinnvoll. Die Renderfunktion ...? Keine Ahnung.

Zum Thema Outlook und Co. muss ich mich noch näher einlesen. :)

Liebe Grüsse
 
Zurück