Uczymy się odczytywać pliki korzystając z modułu filesystem w node.js – do dzieła!

Zakładam, że plik lorem.txt w folderze files już mamy. Tak odczytamy jego zawartość:

const fs = require("fs");
const path = require("path");

function file(filename) {
    return path.join(__dirname, "files", filename);
}

var lorem = fs.createReadStream(file("lorem.txt"), {
    encoding: "utf8"
});

lorem.pipe(process.stdout);

Spróbujmy zrobić to w funkcji:

const fs = require("fs");
const path = require("path");

function file(filename) {
    return path.join(__dirname, "files", filename);
}

function readFile(filename){
   let path = file(filename);
   try{
     stream = fs.createReadStream(path, {encoding: "utf8"});
     stream.pipe(process.stdout);
    }
    catch (error){
     console.log(error)
    }
}

readFile("lorem.txt");
//lorem ipsum bla bla bla

Dodajmy sprawdzenie, czy taki plik istnieje:

const fs = require("fs");
const path = require("path");

function file(filename) {
    return path.join(__dirname, "files", filename);
}

function readFile(filename){
   let path = file(filename);
   fs.exists(path, function(exists){
    if(!exists){
        console.log("File doesnt exist");
        return;
    }
    try{
        stream = fs.createReadStream(path, {encoding: "utf8"});
        stream.pipe(process.stdout);
    }
    catch (error){
        console.log(error)
    }

   });
}

readFile("lorem.txt");
// lorem ipsum bla bla bla

Teraz wywołajmy naszą funkcję na dwóch plikach, z których drugi nie istnieje:

const fs = require("fs");
const path = require("path");

function file(filename) {
    return path.join(__dirname, "files", filename);
}

function readFile(filename){
   let path = file(filename);
   fs.exists(path, function(exists){
    if(!exists){
        console.log("File doesnt exist");
        return;
    }
    try{
        stream = fs.createReadStream(path, {encoding: "utf8"});
        stream.pipe(process.stdout);
    }
    catch (error){
        console.log(error)
    }

   });
}

readFile("lorem.txt");
readFile("lorem2.txt");

// File doesnt exist
// lorem ipsum bla bla bla

Warto zwrócić uwagę na asynchroniczność kodu – najpierw dostajemy efekt drugiego wywołania, bo samo exists jest asynchroniczne i widząc, że lorem2.txt nie istnieje szybciej się wywołuje.