Node.js, impossibile aprire i file. Errore: ENOENT, stat './path/to/file'


126

Ho sviluppato un programma node.js usando Express Framework sul mio computer, dove funziona benissimo senza lamentele.

Tuttavia, quando eseguo il programma sul mio dispositivo SUSE Studio, dove è destinato a vivere, ricevo un errore a qualsiasi interazione tra file.

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

Ho verificato che i permessi dei file siano corretti, quali sono. Il mio computer e il mio dispositivo eseguono versioni diverse del nodo, se questo è importante.

qualche idea?


1
Dato che il percorso è relativo, forse lo stai eseguendo da una directory diversa? Come stai generando il percorso e qual è la struttura della directory? E come stai eseguendo il nodo?
loganfsmyth,

1
Grazie, sì, stavo eseguendo lo script da una directory diversa e ho follemente supposto che il percorso del file fosse relativo allo script stesso. Sapevo che era qualcosa di semplice come questo :)

Dovrebbe essere risolvibile. Puoi aggiungere del codice che mostra come stai facendo il percorso e in cosa ti aspetti che risolva? Se vuoi che sia relativo a un determinato file, normalmente lo faresti__dirname + 'path/to/file';
loganfsmyth

Sì, è quello che ho fatto ora. Stavo eseguendo lo script eseguendo "node ~ / path / to / script.js" e mi aspettavo che i riferimenti relativi ai file nel mio script si risolvessero in "~ / path / to" Grazie!

Risposte:


187

I percorsi specificati con a .sono relativi alla directory di lavoro corrente, non relativa al file di script. Quindi il file potrebbe essere trovato se si esegue node app.jsma non se si esegue node folder/app.js. L'unica eccezione a ciò è require('./file')e ciò è possibile solo perché requireesiste per modulo e quindi sa da quale modulo viene chiamato.

Per creare un percorso relativo allo script, è necessario utilizzare la __dirnamevariabile.

var path = require('path');

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

o potenzialmente

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

11
Grazie; a volte sono le piccole cose come questa che sono difficili da trovare nella documentazione, per i neofiti (come me!).

5

Qui il codice per utilizzare il tuo app.js

input specifica il nome del file

res.download(__dirname+'/'+input);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.