Было задание обработать запросы "GET", "POST", "DELETE".
Написал. Вроде как даже и работает все. Но явно же что тут 100500 недочетов.
Подскажите пожалуйста, что стоило бы дописать/исправить в коде?
curl http://localhost:8080/page/index.html
curl -X DELETE http://localhost:8080/page/index.html
curl -d "Hello world" http://localhost:8080/page/index.html
// app.js
let http = require("http");
let fs = require("fs");
let handler = require("./handler");
new http.createServer(handler).listen(8080);
// handler.js
let url = require("url");
let fs = require("fs");
let config = require("config");
let path = require("path");
module.exports = (req, res) => {
let urlParsed = url.parse(req.url);
let pathname = urlParsed.pathname;
let filePath = path.join(config.publicRoot, pathname);
if (!filePath.startsWith(config.publicRoot + path.sep)) {
res.statusCode = 400;
res.end("Bye bye silly hacker!");
}
fs.readFile(filePath, (err, content) => {
if (err) {
if (err.code == "ENOENT") {
res.statusCode = 404;
res.end("404");
} else {
res.statusCode = 500;
res.end("Server Error")
}
}
if (req.method == "GET") {
let file = new fs.ReadStream(filePath);
file.pipe(res);
file.on("error", err => {
res.statusCode = 500;
res.end("Server error");
console.error(err);
});
res.on("close", () => {
file.destroy();
});
}
if (req.method == "POST") {
let file = new fs.createWriteStream(filePath);
req.pipe(file);
res.end();
}
if (req.method == "DELETE") {
try {
fs.unlink(filePath, err => {
if (err) {
throw err;
}
res.statusCode = 200;
res.end("File was removed");
});
} catch (err) {
if (err.code == "ENOENT") {
res.statusCode = 404;
res.end("File not found");
} else {
res.statusCode = 500;
res.end("Error on removing file");
}
}
}
});
};
// config.js
let path = require("path");
module.exports = {
projectRoot: process.cwd(),
publicRoot: process.cwd() + path.sep + "public"
};