2012-11-24 3 views
118

Ich habe ein Programm node.js mit dem Express-Framework auf meinem Computer entwickelt, wo es ohne Beanstandungen läuft.Node.js, Dateien können nicht geöffnet werden. Fehler: ENOENT, stat './path/to/file'

Wenn ich das Programm jedoch auf meiner SUSE Studio-Appliance ausführe, wo es leben soll, erhalte ich bei jeder Dateiinteraktion einen Fehler.

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

Ich habe überprüft, dass die Dateiberechtigungen korrekt sind, was sie sind. Mein Computer und meine Appliance führen unterschiedliche Versionen von Node aus, wenn dies wichtig ist.

Irgendwelche Gedanken?

+1

Da der Pfad relativ ist, vielleicht sind Sie es laufen aus einem anderen Verzeichnis? Wie generieren Sie den Pfad und was 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 wäre. Ich wusste, dass es so einfach war :) – CalumMc

+0

Es sollte reparierbar sein. Kannst du Code hinzufügen, der zeigt, wie du den Pfad erstellst und was er erwarten soll? Wenn Sie möchten, dass es relativ zu einer bestimmten Datei ist, würden Sie normalerweise '__dirname + 'Pfad/zu/Datei';' – loganfsmyth

Antwort

178

Die mit . angegebenen Pfade beziehen sich auf das aktuelle Arbeitsverzeichnis und nicht auf die Skriptdatei. Die Datei könnte also gefunden werden, wenn Sie node app.js ausführen, aber nicht, wenn Sie node folder/app.js ausführen. Die einzige Ausnahme ist require('./file') und das ist nur möglich, weil require pro Modul existiert und somit weiß, aus welchem ​​Modul es aufgerufen wird.

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

var path = require('path'); 

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

oder potentiell

path.join(__dirname, 'path', 'to', 'file') 
+9

Danke; Manchmal sind es die kleinen Dinge, die in der Dokumentation schwer zu finden sind, für Anfänger (wie mich!). – CalumMc

4

Hier ist der Code Ihre app.js

Eingabe zu verwenden gibt Dateinamen

res.download(__dirname+'/'+input); 
Verwandte Themen