Piszemy serwer plików txt z naszego folderu files w node.js, wykorzystując już poznane koncepcje. Do dzieła.

Na początek – przeparsujmy url:

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

const server = http.createServer(function(req, res) {

    var fileName = null;
    var file = null;

    var url = req.url;

    url = url.startsWith("/") ? url.slice(1) : url;
    url = url.includes("?") ? url.slice(0, url.indexOf("?")) : url;
    
    res.writeHead(200, {"Content-Type": "text/plain"});
    res.write(`URL: ${url}`);

    res.end();

});

server.listen(8080, function() {
    console.log("Serwer uruchomiony pod adresem: http://localhost:8080");
});

//http://localhost:8080/blabla?q=a
//URL: blabla

Dodajmy mechanizm rozpoznający nazwy plików:

const server = http.createServer(function(req, res) {

    var fileName = null;
    var file = null;

    var url = req.url;

    url = url.startsWith("/") ? url.slice(1) : url;
    url = url.includes("?") ? url.slice(0, url.indexOf("?")) : url;

    if(url === "") {
        fileName = "lorem.txt";
    } else {
        fileName = url;
    }
    
    res.writeHead(200, {"Content-Type": "text/plain"});
    res.write(`Filename: ${fileName}`);

    res.end();

});

server.listen(8080, function() {
    console.log("Serwer uruchomiony pod adresem: http://localhost:8080");
});

//http://localhost:8080/blabla.txt?q=a
//Filename: blabla.txt

//http://localhost:8080/?q=a
//Filename: lorem.txt

Teraz dodajmy serwowanie tych plików oraz obsługę błędów:

const server = http.createServer(function(req, res) {

    var fileName = null;
    var file = null;

    var url = req.url;

    url = url.startsWith("/") ? url.slice(1) : url;
    url = url.includes("?") ? url.slice(0, url.indexOf("?")) : url;

    if(url === "") {
        fileName = "lorem.txt";
    } else {
        fileName = url;
    }
    
    file = fs.createReadStream(path.join(__dirname, "files", fileName));

    file.on("error", function(err) {

        res.writeHead(404, "Not Found");
        res.end();

    });

    res.writeHead(200, {"Content-Type": "text/plain"});

    file.pipe(res);

});

Więcej w następnej lekcji.