const express = require("express"); const bodyParser = require("body-parser"); const fs = require("fs"); const { join } = require("path"); const { log } = require("console"); // express app const app = express(); const jsonParser = bodyParser.json(); // multer const multer = require("multer"); const { PassThrough } = require("stream"); const upload = multer(); const imageFolder = join(__dirname, "images"); fs.mkdirSync(imageFolder, { recursive: true }); // Создать папку, если не существует const imageStore = multer.diskStorage({ destination: function (_req, file, cb) { console.log("file : ", file); return cb(null, imageFolder); }, filename: function (_req, file, cb) { console.log("file from filename function : ", file); let origFileName = file.originalname.split(".")[0]; let filename = origFileName + "-" + Date.now() + path.extname(file.originalname); console.log("filename : ", filename); return cb(null, filename); }, }); // 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); } }); // multer // Получение изображений пользователей // app.get("/api/images", load, function (req, res) { // res.status(200).send(); // }); // Загрузка изображения для пользователя app.post("/api/images/upload/:id", upload.single("file"), (req, res) => { if (!req.body) return res.sendStatus(400); if (!req.body.name) return res.sendStatus(400); var userId = req.body.id; console.log("Загружается файл", userId); fs.unlinkSync(req.file.path); res.status(200).send(); }); // Удаление изображения для пользователя app.listen(3000, function () { log("Сервер на порту 3000"); });