This commit is contained in:
Andrew 2022-03-14 12:05:26 +07:00
parent a101924587
commit f662d9933f
13 changed files with 2691 additions and 0 deletions

79
w6/index.js Normal file
View file

@ -0,0 +1,79 @@
import express from "express";
import mustache from "mustache";
import bodyParse from "body-parser";
import { readdirSync, readFileSync } from "fs";
const app = express();
app.use(express.static("./static"));
app.use(bodyParse.urlencoded({ extended: true }));
const port = 9559;
const data = JSON.parse(readFileSync("./goods.json", "utf-8"));
const templates = new Map(readdirSync("./templates").map(fn => [fn, readFileSync(`./templates/${fn}`, "utf-8")]));
app.get("/", (req, res) => {
res.send(mustache.render(templates.get("mainPage.html"), data));
});
app.get("/category/:category", (req, res) => {
const goodsForCategory = data.goods.filter(el => el.category === req.params.category);
if (goodsForCategory.length === 0) {
res.redirect("/");
} else {
res.send(mustache.render(templates.get("categoryPage.html"), { category: req.params.category, goods: goodsForCategory }));
}
});
app.get("/goods/:goodUUID", (req, res) => {
let good = null;
let user = null;
for (let _good of data.goods) {
if (_good.guid !== req.params.goodUUID) continue;
good = _good;
break;
}
for (let _user of data.users) {
if (_user.id !== good.uid) continue;
user = _user;
break;
}
if (good === null || user === null) {
res.redirect("/");
} else {
res.send(mustache.render(templates.get("goodsPage.html"), { good, user }));
}
});
app.get("/user/:userUUID", (req, res) => {
let user = null;
for (let _user of data.users) {
if (_user.guid !== req.params.userUUID) continue;
user = _user;
break;
}
if (user === null) {
res.redirect("/");
} else {
const goods = data.goods.filter(e => e.uid === user.id);
res.send(mustache.render(templates.get("userPage.html"), { user, goods, goodsCount: goods.length }));
}
});
app.post("/search", (req, res) => {
const term = req.body.searchTerm.toLowerCase();
const st = req.body.searchType;
if (term === "") {
res.redirect("/");
} else {
const showUsers = st === "usersOnly" || st === "both";
const showGoods = st === "goodsOnly" || st === "both";
const users = showUsers? data.users.filter(u => u.fullName.toLowerCase().includes(term)) : [];
const goods = showGoods? data.goods.filter(e => e.title.toLowerCase().includes(term) || e.description.toLowerCase().includes(term)) : [];
res.send(mustache.render(templates.get("searchPage.html"), { term, users, goods, showUsers, showGoods }));
}
});
app.listen(port, () => console.log(`⚡️ Serving on port ${port}`));