Node.js kann keine Dateien öffnen. Fehler: ENOENT, stat './path/to/file'

126

Ich habe ein node.js-Programm unter Verwendung des Express-Frameworks auf meinem Computer entwickelt, wo es ohne Beschwerden einwandfrei läuft.

Wenn ich das Programm jedoch auf meiner SUSE Studio-Appliance ausführe, auf der es leben soll, wird bei jeder Dateiinteraktion ein Fehler angezeigt.

Error: ENOENT, stat './path/to/file'

Ich habe überprüft, ob die Dateiberechtigungen korrekt sind. Auf meinem Computer und meiner Appliance werden verschiedene Versionen des Knotens ausgeführt, wenn dies wichtig ist.

Irgendwelche Gedanken?


quelle
1
Da der Pfad relativ ist, führen Sie ihn möglicherweise aus einem anderen Verzeichnis aus? Wie generieren Sie den Pfad und wie ist die Verzeichnisstruktur? Und wie läuft der Knoten?
Loganfsmyth
1
Danke, ja, ich habe das Skript aus einem anderen Verzeichnis ausgeführt und dummerweise angenommen, dass der Dateipfad relativ zum Skript selbst sein würde. Ich wusste, dass es so einfach war :)
Es sollte reparabel sein. Können Sie Code hinzufügen, der zeigt, wie Sie den Pfad erstellen und wie er sich voraussichtlich auflösen wird? Wenn Sie möchten, dass es relativ zu einer bestimmten Datei ist, tun Sie dies normalerweise__dirname + 'path/to/file';
loganfsmyth
Ja, das habe ich jetzt getan. Ich habe das Skript ausgeführt, indem ich "node ~ / path / to / script.js" ausgeführt habe und erwartet habe, dass relative Verweise auf Dateien in meinem Skript in "~ / path / to" aufgelöst werden. Danke!

Antworten:

187

Mit a angegebene Pfade .beziehen sich auf das aktuelle Arbeitsverzeichnis und nicht auf die Skriptdatei. Die Datei wird möglicherweise gefunden, wenn Sie ausgeführt werden node app.js, nicht jedoch, wenn Sie ausgeführt werden node folder/app.js. Die einzige Ausnahme ist require('./file')und das ist nur möglich, weil requirees pro Modul existiert und somit weiß, von welchem ​​Modul es aufgerufen wird.

Um einen Pfad relativ zum Skript zu erstellen, müssen Sie die __dirnameVariable verwenden.

var path = require('path');

path.join(__dirname, 'path/to/file')

oder möglicherweise

path.join(__dirname, 'path', 'to', 'file')
loganfsmyth
quelle
11
Vielen Dank; Es sind manchmal solche kleinen Dinge, die für Neulinge (wie mich!) in der Dokumentation schwer zu finden sind.
5

Hier der Code zur Verwendung Ihrer app.js

Eingabe gibt den Dateinamen an

res.download(__dirname+'/'+input);
AmirtharajCVijay
quelle