Daten von fs.readFile abrufen
var content;
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
console.log(content);
Logs undefined
, warum?
275
3
Um zu erläutern, was @Raynos gesagt hat, ist die Funktion, die Sie definiert haben, ein asynchroner Rückruf. Sie wird nicht sofort ausgeführt, sondern erst, wenn das Laden der Datei abgeschlossen ist. Wenn Sie readFile aufrufen, wird die Kontrolle sofort zurückgegeben und die nächste Codezeile wird ausgeführt. Wenn Sie also console.log aufrufen, wurde Ihr Callback noch nicht aufgerufen, und der Inhalt wurde noch nicht gesetzt. Willkommen bei der asynchronen Programmierung.
Beispielhafte Ansätze
Oder noch besser, wie Raynos Beispiel zeigt, verpacken Sie Ihren Aufruf in eine Funktion und übergeben Sie Ihre eigenen Rückrufe. (Anscheinend ist das die bessere Praxis) Ich denke, wenn man sich angewöhnt, seine asynchronen Aufrufe in eine Funktion zu verpacken, die einen Callback aufnimmt, erspart man sich eine Menge Ärger und unordentlichen Code.
Hierfür gibt es eine Synchronous-Funktion:
http://nodejs.org/api/fs.html#fs_fs_readfilesync_filename_encoding
Asynchron
fs.readFile(Dateiname, [Kodierung], [Callback])`
Liest Asynchron den gesamten Inhalt einer Datei. Beispiel:_
Dem Callback werden zwei Argumente (err, data) übergeben, wobei data der Inhalt der Datei ist.
Wenn keine Kodierung angegeben ist, wird der Rohpuffer zurückgegeben.
SYNCHRONOUS
fs.readFileSync(Dateiname, [Kodierung])
Synchrone Version von fs.readFile. Liefert den Inhalt der Datei mit dem Namen filename.
Wenn die Kodierung angegeben ist, gibt diese Funktion einen String zurück. Andernfalls gibt sie einen Puffer zurück._