Path - Windows/Mac/Linux
Suspekta
- javascript
Hallo,
ich bin neu bei JavaScript und frage mich, wie ich mit Pfadangaben umgehen muss um eine App auf Windows und anderen Systemen laufen zu lassen.
In diesem einfachen kleinen Beispiel versuche ich auf ein Verzeichnis auf unserem Server zuzugreifen (unter Windows funktioniert das (das Ergebnis ist "\\172.16.0.102\Allgemein\Daten\")) aber ist das auch die "feine" Art ? 😀
'use strict';
const path = require('path');
const dirname = path.sep + path.sep + path.join('172.16.0.102','Allgemein','Daten') + path.sep;
console.log(dirname);
Hallo Suspekta,
du generierst einen UNC Pfad - der funktioniert für den direkten Zugriff nur unter Windows, soweit ich weiß. Auf X-Systemen musst Du den UNC-Pfad vorher mounten, d.h. du musst ohnehin einen anderen Weg gehen, um an die Daten zu kommen.
Generell ist die Verwendung von path.sep aber löblich und nicht zu beanstanden 😉
Rolf
Danke für deine Antwort. Das habe ich mir schon gedacht, dass es so nur unter Windows funken wird. Ich muss mir mal einen Mac zulegen um da mal die Wissenslücke von McsOS zu schließen😀
Hallo Suspekta,
der Mac verwendet ein Unix-Derivat.
Du kannst auch, um keine angebissenen Äpfel herumliegen zu lassen, unter Windows eine virtuelle Maschine erzeugen und darin ein Linux laufen lassen.
Je nach Windows kannst Du den enthaltenen HyperV aktivieren und hast dann gleich eine VM-Umgebung.
Rolf
Hallo,
In diesem einfachen kleinen Beispiel versuche ich auf ein Verzeichnis auf unserem Server zuzugreifen (unter Windows funktioniert das (das Ergebnis ist "\\172.16.0.102\Allgemein\Daten\")) aber ist das auch die "feine" Art ? 😀
So bekommst du keinen Zugriff. Das scheint mir eine normale Windows-Ordner Freigabe, die auch beim Client auf ein Ziellaufwerk gemappt sein muss. Ansonsten müsste es ja auch Nutzerabfrage/Zugangsberechtigung geben.
Du müsstest also zunächst festlegen, mit welchem Protokoll bzw. mit welcher API der Server die Daten bereitstellen soll und ob ggfs. eine Berechtigung benötigt wird (und wo die Zugangsdaten ggfs. sicher abgelegt werden).
In der Regel wird so etwas als fixe Umgebungsvariable hinterlegt. Das hat den Vorteil, dass du mit der Umgebungsvariable arbeitest, unabhängig vom Betriebssystem.
const path = require('path');
const dirDaten = path.join(process.env.ORDNER_ALLGEMEIN, "Daten");
Das Anlegen der Umgebungsvariable ist abhängig, wo und wie die Anwendung gestartet wird. Am einfachsten ist die Nutzung von dotenv
Gruss Michael
Hallo Michael_K,
So bekommst du keinen Zugriff. Das scheint mir eine normale Windows-Ordner Freigabe, die auch beim Client auf ein Ziellaufwerk gemappt sein muss.
Wenn
dann funktioniert das direkt. \\server\share\... ist ein sogenannter UNC-Pfad und ist unter Windows in vielen Programmen direkt nutzbar. Nicht in jedem, zugegebenermaßen. In der CMD Shell lässt sich ein UNC-Pfad z.B. nicht als aktuelles Verzeichnis setzen. Aber type \\172.16.0.102\Allgemein\Daten\datei.txt
würde funktionieren.
Wenn Zugriffsrechte definiert sind, muss 172.16.0.102 wissen, wer zugreifen will (d.h. es braucht Credentials), und dafür braucht's entweder einen Domänencontroller, in dem 127.16.0.102 sowie der Client drin sind, oder eine passende Workgroup, oder einen NET USE mit /USER Option. NET USE lässt sich aber auch auf UNC-Pfade legen, man MUSS nicht zwingend einen Laufwerksbuchstaben mappen.
Unter Linux geht das nicht, da muss man per mnt eine Verbindung zwischen einem lokalen Mountpoint und der entsprechenden cifs-Ressource herstellen. Wenn ich mich recht erinnere, kann man dann auch Credentials festlegen. Wie es bei Linux aussieht, wenn ich vom Linux-Host 1 auf eine Ressource auf Linux-Host 2 zugreifen will, weiß ich nicht.
(Disclaimer zu Windows: so sagt meine Erfahrung von 30 Jahren Arbeit in Windows-Domänen)
(Disclaimer zu Linux: so war jedenfalls meine Erfahrung auf meinem Raspi und so sagen es meine diesbezüglichen Fundstellen im Netz)
Rolf