364 Stimmen

Daten von fs.readFile abrufen

var content;
fs.readFile('./Index.html', function read(err, data) {
    if (err) {
        throw err;
    }
    content = data;
});
console.log(content);

Protokolle undefined warum?

23voto

user2266928 Punkte 445
var data = fs.readFileSync('tmp/reltioconfig.json','utf8');

für den synchronen Aufruf einer Datei verwenden, ohne deren Ausgabe als Puffer zu kodieren.

14voto

Taitu-lism Punkte 756

Wie gesagt, fs.readFile ist eine asynchrone Aktion. Das bedeutet, dass Sie, wenn Sie node anweisen, eine Datei zu lesen, berücksichtigen müssen, dass dies einige Zeit in Anspruch nehmen wird, und dass node in der Zwischenzeit den folgenden Code ausführt. In Ihrem Fall ist es: console.log(content); .

Es ist, als würde man einen Teil des Codes auf eine lange Reise schicken (wie das Lesen einer großen Datei).

Schauen Sie sich die Kommentare an, die ich geschrieben habe:

var content;

// node, go fetch this file. when you come back, please run this "read" callback function
fs.readFile('./Index.html', function read(err, data) {
    if (err) {
        throw err;
    }
    content = data;
});

// in the meantime, please continue and run this console.log
console.log(content);

Deshalb ist content noch leer ist, wenn Sie es protokollieren, hat der Knoten den Inhalt der Datei noch nicht abgerufen.

Dies könnte durch die Verschiebung console.log(content) innerhalb der Rückruffunktion, direkt nach content = data; . Auf diese Weise sehen Sie das Protokoll, wenn der Knoten die Datei gelesen hat und nachdem content erhält einen Wert.

13voto

Dominic Punkte 55062

Verwenden Sie die eingebaute promisify-Bibliothek (Node 8+), um diese alten Callback-Funktionen eleganter zu gestalten.

const fs = require('fs');
const util = require('util');

const readFile = util.promisify(fs.readFile);

async function doStuff() {
  try {
    const content = await readFile(filePath, 'utf8');
    console.log(content);
  } catch (e) {
    console.error(e);
  }
}

12voto

doctorlee Punkte 387
const fs = require('fs')
function readDemo1(file1) {
    return new Promise(function (resolve, reject) {
        fs.readFile(file1, 'utf8', function (err, dataDemo1) {
            if (err)
                reject(err);
            else
                resolve(dataDemo1);
        });
    });
}
async function copyFile() {

    try {
        let dataDemo1 = await readDemo1('url')
        dataDemo1 += '\n' +  await readDemo1('url')

        await writeDemo2(dataDemo1)
        console.log(dataDemo1)
    } catch (error) {
        console.error(error);
    }
}
copyFile();

function writeDemo2(dataDemo1) {
    return new Promise(function(resolve, reject) {
      fs.writeFile('text.txt', dataDemo1, 'utf8', function(err) {
        if (err)
          reject(err);
        else
          resolve("Promise Success!");
      });
    });
  }

10voto

Synchrones und asynchrones Lesen von Dateien:

//fs module to read file in sync and async way

var fs = require('fs'),
    filePath = './sample_files/sample_css.css';

// this for async way
/*fs.readFile(filePath, 'utf8', function (err, data) {
    if (err) throw err;
    console.log(data);
});*/

//this is sync way
var css = fs.readFileSync(filePath, 'utf8');
console.log(css);

Node Cheat Verfügbar unter datei_lesen .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X