Files
TIS-lab4/app.js
2023-11-08 14:04:19 +03:00

143 lines
3.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const express = require("express");
const bodyParser = require("body-parser");
const fs = require("fs");
const { join } = require("path");
const { log } = require("console");
const app = express();
const jsonParser = bodyParser.json();
// local bootstrap
app.use(
"/bootstrap",
express.static(join(__dirname, "node_modules/bootstrap/dist"))
);
// local jquery
app.use("/jquery", express.static(join(__dirname, "node_modules/jquery/dist")));
// index.html
app.get("/", function (req, res) {
res.sendFile(join(__dirname, "index.html"));
});
// Список пользователей
app.get("/api/users", function (req, res) {
var content = fs.readFileSync("users.json", "utf8");
var users = JSON.parse(content);
res.send(users);
});
// Получение одного пользователя по id
app.get("/api/users/:id", function (req, res) {
var id = req.params.id; // получаем id
var content = fs.readFileSync("users.json", "utf8");
var users = JSON.parse(content);
var user = null;
// находим в массиве пользователя по id
for (var i = 0; i < users.length; i++) {
if (users[i].id == id) {
user = users[i];
break;
}
}
// Отправляем пользователя
if (user) {
res.send(user);
} else {
res.status(404).send();
}
});
// Получение отправленных данных
app.post("/api/users", jsonParser, function (req, res) {
if (!req.body) return res.sendStatus(400);
if (!req.body.name) return res.sendStatus(400);
var userName = req.body.name;
var userAge = +req.body.age;
var user = { name: userName, age: userAge };
if (fs.existsSync("users.json")) {
var data = fs.readFileSync("users.json", "utf8");
var users = JSON.parse(data);
} else {
fs.writeFileSync("users.json");
}
// Находим максимальный id
var maxid = Math.max.apply(
Math,
users.map(function (o) {
return o.id;
})
);
// Увеличиваем его на единицу
user.id = maxid + 1;
// Добавляем пользователя в массив
users.push(user);
var data = JSON.stringify(users);
// Перезаписываем файл с новыми данными
fs.writeFileSync("users.json", data);
res.send(user);
});
// удаление пользователя по id
app.delete("/api/users/:id", function (req, res) {
var id = req.params.id;
var data = fs.readFileSync("users.json", "utf8");
var users = JSON.parse(data);
var index = -1;
// находим индекс пользователя в массиве
for (var i = 0; i < users.length; i++) {
if (users[i].id == id) {
index = i;
break;
}
}
if (index > -1) {
// удаляем пользователя из массива по индексу
var user = users.splice(index, 1)[0];
var data = JSON.stringify(users);
fs.writeFileSync("users.json", data);
// отправляем удаленного пользователя
res.send(user);
} else {
res.status(404).send();
}
});
// изменение пользователя
app.put("/api/users", jsonParser, function (req, res) {
if (!req.body) return res.sendStatus(400);
if (!req.body.name) return res.sendStatus(400);
var userId = req.body.id;
var userName = req.body.name;
var userAge = req.body.age;
var data = fs.readFileSync("users.json", "utf8");
var users = JSON.parse(data);
var user;
for (var i = 0; i < users.length; i++) {
if (users[i].id == userId) {
user = users[i];
break;
}
}
// изменяем данные у пользователя
if (user) {
user.age = userAge;
user.name = userName;
var data = JSON.stringify(users);
fs.writeFileSync("users.json", data);
res.send(user);
} else {
res.status(404).send(user);
}
});
app.listen(3000, function () {
log("Сервер на порту 3000");
});