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.