Node.js, no se pueden abrir archivos. Error: ENOENT, stat './path/to/file'

126

Desarrollé un programa node.js usando el framework express en mi computadora, donde funciona bien sin quejas.

Sin embargo, cuando ejecuto el programa en mi dispositivo SUSE Studio, donde está destinado a vivir, recibo un error en cualquier interacción de archivo.

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

He comprobado que los permisos de archivo son correctos, que son. Mi computadora y mi dispositivo están ejecutando diferentes versiones de nodo, si esto es importante.

¿Alguna idea?


fuente
1
Como la ruta es relativa, ¿quizás la esté ejecutando desde un directorio diferente? ¿Cómo está generando la ruta y cuál es la estructura del directorio? ¿Y cómo estás ejecutando nodo?
loganfsmyth
1
Gracias, sí, estaba ejecutando el script desde un directorio diferente y asumí tontamente que la ruta del archivo sería relativa al script en sí. Sabía que era algo simple como esto :)
Debería ser reparable. ¿Puedes agregar algún código que muestre cómo estás haciendo el camino y qué esperas que se resuelva? Si desea que sea relativo a un archivo en particular, normalmente lo haría__dirname + 'path/to/file';
loganfsmyth
Sí, eso es lo que he hecho ahora. Estaba ejecutando el script ejecutando "node ~ / path / to / script.js" y esperando que las referencias relativas a los archivos en mi script se resuelvan en "~ / path / to" ¡Gracias!

Respuestas:

187

Las rutas especificadas con a .son relativas al directorio de trabajo actual, no relativo al archivo de script. Por lo tanto, el archivo se puede encontrar si ejecuta, node app.jspero no si lo hace node folder/app.js. La única excepción a esto es require('./file')y eso solo es posible porque requireexiste por módulo y, por lo tanto, sabe de qué módulo se está llamando.

Para hacer una ruta relativa al script, debe usar la __dirnamevariable.

var path = require('path');

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

o potencialmente

path.join(__dirname, 'path', 'to', 'file')
loganfsmyth
fuente
11
Gracias; A veces, las cosas pequeñas como esta son difíciles de encontrar en la documentación, para los novatos (¡como yo!).
5

Aquí el código para usar tu app.js

la entrada especifica el nombre del archivo

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