Hent data fra fs.readFile
var content;
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
console.log(content);
Logger udefinert
, hvorfor?
275
3
For å utdype det @Raynos sa, er funksjonen du har definert en asynkron tilbakeringing. Den kjøres ikke med en gang, men når filinnlastingen er fullført. Når du kaller readFile, returneres kontrollen umiddelbart og neste kodelinje kjøres. Så når du kaller console.log, har tilbakeringingen din ennå ikke blitt påkalt, og dette innholdet er ennå ikke angitt. Velkommen til asynkron programmering.
Eksempel på tilnærminger
Eller enda bedre, som Raynos eksempel viser, pakk inn anropet ditt i en funksjon og send inn dine egne tilbakeringinger. (Tilsynelatende er dette bedre praksis) Jeg tror det å bli vant til å pakke inn async-anropene dine i en funksjon som tar en tilbakeringing, vil spare deg for mye trøbbel og rotete kode.
Det finnes faktisk en synkron funksjon for dette:
http://nodejs.org/api/fs.html#fs_fs_readfilesync_filename_encoding
Asynchronous
fs.readFile(filnavn, [encoding], [callback])
Asynkront leser hele innholdet i en fil. Eksempel:
Tilbakekallingen får to argumenter (err, data), der data er innholdet i filen.
_Hvis ingen koding er spesifisert, returneres råbufferen.
SYNCHRONOUS
fs.readFileSync(filnavn, [koding])
Synkron versjon av fs.readFile. Returnerer innholdet i filen med navnet filnavn.
_Hvis koding er angitt, returnerer denne funksjonen en streng. Ellers returnerer den en buffer.