2012-03-27 16 views
38

Chcę załadować test.txt z nodejs.plik obciążenia nodejs

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

Ścieżka dostępu do serwera to C:\server\test\server.js. Test.txt mieści się w tym samym katalogu, ale pojawia się ten błąd: Error: ENOENT, no such file or directory 'C:\Users\User\test.txt'

Odpowiedz

57

Ścieżki w węźle są rozwiązywane w stosunku do aktualnej pracy informator. Przedrostek ścieżki z __dirname, aby rozwiązać ścieżkę do lokalizacji skryptu węzła.

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

dziękuje, teraz działa –

+0

Otrzymuję 'ReferenceError: __dirname is not defined'. Czy to dlatego, że powinienem ręcznie zdefiniować 'var __dirname = '/ the/path /''? – myfirsttime1

+1

@ myfirsttime1 '__dirname' działa tylko w skryptach węzła, a nie w REPL. –

0

więc jeśli jest w tym samym katalogu, po prostu zrób to

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

I downvoted, bo oczywiście nie działa. –

+0

Rob to całkowicie robi .. po prostu zrobił to w terminalu węzła – samccone

+2

Utwórz 'x.js' w'/tmp/x/x.js'. Umieść w nim kod OPs. Utwórz także '/ tmp/x/test.txt'. Teraz ustaw katalog roboczy na '/ tmp' (np.' Cd/tmp') i użyj 'węzła x/x.js' lub' node/tmp/x/x.js' -> 'Błąd: ENOENT, nie ma takiego pliku lub katalogu "test.txt" ' –

6

Należy użyć __dirname uzyskać nazwę katalogu plik jest umieszczony zamiast bieżącego katalogu roboczego:

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

z węzłem 0,12, to można to zrobić synchronicznie teraz:

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 to system plików. readFileSync() zwraca Bufor lub ciąg znaków, jeśli zapytasz.

fs poprawnie zakłada, że ​​ścieżki względne są problemem z zabezpieczeniami. path to obejście.

Aby załadować jako ciąg określić kodowanie:

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

Jeśli jest w tym samym katalogu, powinno działać. Ja testowałem z tym samym kodem, z plikiem name.txt i to działa dobrze:

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