2012-03-27 27 views
38

Quiero cargar test.txt con nodejs.nodejs load file

var fs = require('fs'); 
fs.readFile('./test.txt', function (err, data) { 
    if (err) { 
    throw err; 
    } 
    console.log(data); 
}); 

La ruta del servidor es C:\server\test\server.js. El test.txt se encuentra en el mismo directorio, pero me da este error: Error: ENOENT, no such file or directory 'C:\Users\User\test.txt'

Respuesta

57

Caminos en Nodo se resuelven con respecto al trabajo actual directorio. Prefijo su ruta con __dirname para resolver la ruta a la ubicación de su secuencia de comandos de nodo.

var fs = require('fs'); 
fs.readFile(__dirname + '/test.txt', function (err, data) { 
    if (err) { 
    throw err; 
    } 
    console.log(data.toString()); 
}); 
+0

gracias, ahora funciona –

+0

Me sale 'ReferenceError: __dirname is not defined'. ¿Es porque debería definir manualmente 'var __dirname = '/ the/path /' '? – myfirsttime1

+1

@ myfirsttime1 '__dirname' solo funciona en los scripts de nodo, no en el REPL. –

0

así que si está en el mismo directorio acaba de hacer esto

fs.readFile(__dirname+'/foo.txt',function(e,d){console.log(d)}) 
+2

Bajé la votación porque obviamente no funciona. –

+0

Rob hace totalmente .. solo lo hizo en el nodo terminal – samccone

+2

Crea un 'x.js' en'/tmp/x/x.js'. Pon el código OPs en él. También crea '/ tmp/x/test.txt'. Ahora, configure su directorio de trabajo en '/ tmp' (por ejemplo,' cd/tmp') y use 'node x/x.js' o' node/tmp/x/x.js' -> 'Error: ENOENT, no existe tal archivo o directorio 'test.txt'' –

6

Debe utilizar __dirname para obtener el nombre del directorio el archivo se encuentra en lugar del directorio de trabajo actual:

fs.readFile(__dirname + "/test.txt", ...); 
5

Con Nodo 0,12, es posible hacer esto de forma sincrónica ahora:

var fs = require('fs'); 
    var path = require('path'); 

    // Buffer mydata 
    var BUFFER = bufferFile('../test.txt'); 

    function bufferFile(relPath) { 
    return fs.readFileSync(path.join(__dirname, relPath)); // zzzz.... 
    } 

fs es el sistema de archivos. readFileSync() devuelve un búfer o una cadena si lo solicita.

fs correctamente asume que las rutas relativas son un problema de seguridad. path es una solución temporal.

Para cargar como una cadena, especificar la codificación:

return fs.readFileSync(path,{ encoding: 'utf8' }); 
0

Si está en mismo directorio que debería funcionar. He probado con el mismo código, con un archivo name.txt y funciona bien:

var fs = require('fs'); 
fs.readFile('./test.txt', function (err, data) { 
    if (err) { 
    throw err; 
    } 
    console.log(data.toString()); 
});