2012-03-27 11 views
38

Ich möchte test.txt mit nodejs laden.nodejs Datei laden

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

Der Pfad des Servers ist C:\server\test\server.js. Die test.txt befindet sich im selben Verzeichnis befinden, aber ich habe diesen Fehler: Error: ENOENT, no such file or directory 'C:\Users\User\test.txt'

Antwort

57

Pfade in Knoten sind relativ zum aktuellen Arbeits aufgelöst Verzeichnis. Setzen Sie Ihren Pfad mit __dirname voran, um den Pfad zum Speicherort Ihres Node-Skripts aufzulösen.

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

danke, jetzt funktioniert es –

+0

Ich bekomme 'ReferenceError: __dirname ist nicht definiert'. Liegt es daran, dass ich 'var __dirname = '/ the/path /'' manuell definieren muss? – myfirsttime1

+1

@ myfirsttime1 '__dirname' funktioniert nur in Knotenskripten, nicht in der REPL. –

0

so, wenn es im gleichen Verzeichnis ist gerade dies tun

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

ich downvoted, weil es offensichtlich nicht funktioniert. –

+0

Rob es tut total .. gerade hat es in Knoten-Terminal – samccone

+2

Erstellen Sie ein 'x.js' bei'/tmp/x/x.js'. Setzen Sie den OP-Code hinein. Erstellen Sie auch '/ tmp/x/test.txt'. Stellen Sie nun Ihr Arbeitsverzeichnis auf '/ tmp' (zB' cd/tmp') und verwenden Sie 'node x/x.js' oder' node/tmp/x/x.js' -> 'Fehler: ENOENT, keine solche Datei oder Verzeichnis 'test.txt'' –

6

Sie sollten __dirname verwenden den Verzeichnisnamen zu erhalten die Datei anstelle des aktuellen Arbeitsverzeichnis befindet:

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

mit dem Knoten 0.12, es ist möglich, dies synchron jetzt tun:

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 ist das Dateisystem. readFileSync() gibt einen Puffer oder eine Zeichenfolge zurück, wenn Sie danach fragen.

fs korrekt angenommen relative Pfade sind ein Sicherheitsproblem. path ist ein Workaround.

als String zu laden, geben Sie die Codierung:

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

Wenn es in demselben Verzeichnis ist sollte es funktionieren. Ich habe mit dem gleichen Code getestet, mit einer Datei name.txt und es funktioniert gut:

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