2012-11-24 16 views
118

Ho sviluppato un programma node.js utilizzando il framework espresso sul mio computer, dove funziona senza problemi.Node.js, impossibile aprire i file. Errore: ENOENT, stat './path/to/file'

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

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

Qualche idea?

+1

Dal momento che il percorso è relativo, forse si sta eseguendo lo da una directory diversa? Come stai generando il percorso e qual è la struttura della directory? E come stai facendo funzionare il nodo? – loganfsmyth

+1

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

+0

Dovrebbe essere risolvibile. Puoi aggiungere del codice che mostri come stai facendo il percorso e cosa ti aspetti che risolva? Se vuoi che sia relativo a un particolare file, normalmente dovresti fare "__dirname +" percorso/su/file ";" – loganfsmyth

risposta

178

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

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

var path = require('path'); 

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

o potenzialmente

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

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

4

Ecco il codice per utilizzare i tuoi app.js

ingresso specifica il nome del file

res.download(__dirname+'/'+input); 
Problemi correlati