Compare commits
	
		
			2 Commits
		
	
	
		
			master
			...
			dev-images
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 75f2a70963 | |||
|   | b112ea5b80 | 
							
								
								
									
										15
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| { | ||||
|   // Use IntelliSense to learn about possible attributes. | ||||
|   // Hover to view descriptions of existing attributes. | ||||
|   // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 | ||||
|   "version": "0.2.0", | ||||
|   "configurations": [ | ||||
|     { | ||||
|       "type": "node", | ||||
|       "request": "launch", | ||||
|       "name": "Launch Program", | ||||
|       "skipFiles": ["<node_internals>/**"], | ||||
|       "program": "${workspaceFolder}\\app.js" | ||||
|     } | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										66
									
								
								app.js
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								app.js
									
									
									
									
									
								
							| @@ -4,31 +4,53 @@ 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"))); | ||||
|  | ||||
| // app.use(express.static(__dirname + 'public')); | ||||
| // получение списка данных | ||||
|  | ||||
| // app.use("/index", express.static(join(__dirname + "public"))) | ||||
| // 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 | ||||
| // Получение одного пользователя по id | ||||
| app.get("/api/users/:id", function (req, res) { | ||||
|   var id = req.params.id; // получаем id | ||||
|   var content = fs.readFileSync("users.json", "utf8"); | ||||
| @@ -41,7 +63,7 @@ app.get("/api/users/:id", function (req, res) { | ||||
|       break; | ||||
|     } | ||||
|   } | ||||
|   // отправляем пользователя | ||||
|   // Отправляем пользователя | ||||
|   if (user) { | ||||
|     res.send(user); | ||||
|   } else { | ||||
| @@ -49,9 +71,10 @@ app.get("/api/users/:id", function (req, res) { | ||||
|   } | ||||
| }); | ||||
|  | ||||
| // получение отправленных данных | ||||
| // Получение отправленных данных | ||||
| 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; | ||||
| @@ -64,19 +87,19 @@ app.post("/api/users", jsonParser, function (req, res) { | ||||
|     fs.writeFileSync("users.json"); | ||||
|   } | ||||
|  | ||||
|   // находим максимальный id | ||||
|   // Находим максимальный 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); | ||||
| }); | ||||
| @@ -109,6 +132,7 @@ app.delete("/api/users/:id", function (req, res) { | ||||
| // изменение пользователя | ||||
| 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; | ||||
| @@ -135,6 +159,26 @@ app.put("/api/users", jsonParser, function (req, res) { | ||||
|   } | ||||
| }); | ||||
|  | ||||
| // 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"); | ||||
| }); | ||||
|   | ||||
| @@ -39,6 +39,7 @@ | ||||
|             <th>Имя</th> | ||||
|             <th>Возраст</th> | ||||
|             <th>Опции</th> | ||||
|             <th>Изображение</th> | ||||
|           </tr> | ||||
|         </thead> | ||||
|         <tbody></tbody> | ||||
| @@ -61,6 +62,7 @@ | ||||
|             }, | ||||
|           }); | ||||
|         } | ||||
|  | ||||
|         // Получение одного пользователя | ||||
|         function GetUser(id) { | ||||
|           $.ajax({ | ||||
| @@ -75,6 +77,7 @@ | ||||
|             }, | ||||
|           }); | ||||
|         } | ||||
|  | ||||
|         // Добавление пользователя | ||||
|         function CreateUser(userName, userAge) { | ||||
|           $.ajax({ | ||||
| @@ -91,6 +94,7 @@ | ||||
|             }, | ||||
|           }); | ||||
|         } | ||||
|  | ||||
|         // Изменение пользователя | ||||
|         function EditUser(userId, userName, userAge) { | ||||
|           $.ajax({ | ||||
| @@ -109,7 +113,7 @@ | ||||
|           }); | ||||
|         } | ||||
|  | ||||
|         // сброс формы | ||||
|         // Сброс формы | ||||
|         function reset() { | ||||
|           var form = document.forms["userForm"]; | ||||
|           form.reset(); | ||||
| @@ -128,6 +132,7 @@ | ||||
|             }, | ||||
|           }); | ||||
|         } | ||||
|  | ||||
|         // создание строки для таблицы | ||||
|         var row = function (user) { | ||||
|           return ( | ||||
| @@ -149,6 +154,7 @@ | ||||
|             "'>Удалить</a></td></tr>" | ||||
|           ); | ||||
|         }; | ||||
|  | ||||
|         // сброс значений формы | ||||
|         $("#reset").click(function (e) { | ||||
|           e.preventDefault(); | ||||
| @@ -161,6 +167,7 @@ | ||||
|           var id = this.elements["id"].value; | ||||
|           var name = this.elements["name"].value; | ||||
|           var age = this.elements["age"].value; | ||||
|           if (name == "" || id == "" || age == 0) return false; | ||||
|           if (id == 0) CreateUser(name, age); | ||||
|           else EditUser(id, name, age); | ||||
|         }); | ||||
|   | ||||
							
								
								
									
										155
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										155
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -12,7 +12,8 @@ | ||||
|         "body-parser": "^1.16.0", | ||||
|         "bootstrap": "^5.3.2", | ||||
|         "express": "^4.18.2", | ||||
|         "jquery": "^3.7.1" | ||||
|         "jquery": "^3.7.1", | ||||
|         "multer": "^1.4.5-lts.1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@popperjs/core": { | ||||
| @@ -37,6 +38,11 @@ | ||||
|         "node": ">= 0.6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/append-field": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", | ||||
|       "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" | ||||
|     }, | ||||
|     "node_modules/array-flatten": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", | ||||
| @@ -83,6 +89,22 @@ | ||||
|         "@popperjs/core": "^2.11.8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/buffer-from": { | ||||
|       "version": "1.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", | ||||
|       "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" | ||||
|     }, | ||||
|     "node_modules/busboy": { | ||||
|       "version": "1.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", | ||||
|       "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", | ||||
|       "dependencies": { | ||||
|         "streamsearch": "^1.1.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10.16.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/bytes": { | ||||
|       "version": "3.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", | ||||
| @@ -103,6 +125,20 @@ | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/concat-stream": { | ||||
|       "version": "1.6.2", | ||||
|       "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", | ||||
|       "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", | ||||
|       "engines": [ | ||||
|         "node >= 0.8" | ||||
|       ], | ||||
|       "dependencies": { | ||||
|         "buffer-from": "^1.0.0", | ||||
|         "inherits": "^2.0.3", | ||||
|         "readable-stream": "^2.2.2", | ||||
|         "typedarray": "^0.0.6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/content-disposition": { | ||||
|       "version": "0.5.4", | ||||
|       "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", | ||||
| @@ -135,6 +171,11 @@ | ||||
|       "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", | ||||
|       "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" | ||||
|     }, | ||||
|     "node_modules/core-util-is": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", | ||||
|       "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" | ||||
|     }, | ||||
|     "node_modules/debug": { | ||||
|       "version": "2.6.9", | ||||
|       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | ||||
| @@ -388,6 +429,11 @@ | ||||
|         "node": ">= 0.10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/isarray": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", | ||||
|       "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" | ||||
|     }, | ||||
|     "node_modules/jquery": { | ||||
|       "version": "3.7.1", | ||||
|       "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", | ||||
| @@ -444,11 +490,47 @@ | ||||
|         "node": ">= 0.6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/minimist": { | ||||
|       "version": "1.2.8", | ||||
|       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", | ||||
|       "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/mkdirp": { | ||||
|       "version": "0.5.6", | ||||
|       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", | ||||
|       "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", | ||||
|       "dependencies": { | ||||
|         "minimist": "^1.2.6" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "mkdirp": "bin/cmd.js" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/ms": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | ||||
|       "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" | ||||
|     }, | ||||
|     "node_modules/multer": { | ||||
|       "version": "1.4.5-lts.1", | ||||
|       "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", | ||||
|       "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", | ||||
|       "dependencies": { | ||||
|         "append-field": "^1.0.0", | ||||
|         "busboy": "^1.0.0", | ||||
|         "concat-stream": "^1.5.2", | ||||
|         "mkdirp": "^0.5.4", | ||||
|         "object-assign": "^4.1.1", | ||||
|         "type-is": "^1.6.4", | ||||
|         "xtend": "^4.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 6.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/negotiator": { | ||||
|       "version": "0.6.3", | ||||
|       "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", | ||||
| @@ -457,6 +539,14 @@ | ||||
|         "node": ">= 0.6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/object-assign": { | ||||
|       "version": "4.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", | ||||
|       "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", | ||||
|       "engines": { | ||||
|         "node": ">=0.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/object-inspect": { | ||||
|       "version": "1.13.0", | ||||
|       "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.0.tgz", | ||||
| @@ -489,6 +579,11 @@ | ||||
|       "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", | ||||
|       "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" | ||||
|     }, | ||||
|     "node_modules/process-nextick-args": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", | ||||
|       "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" | ||||
|     }, | ||||
|     "node_modules/proxy-addr": { | ||||
|       "version": "2.0.7", | ||||
|       "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", | ||||
| @@ -537,6 +632,25 @@ | ||||
|         "node": ">= 0.8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/readable-stream": { | ||||
|       "version": "2.3.8", | ||||
|       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", | ||||
|       "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", | ||||
|       "dependencies": { | ||||
|         "core-util-is": "~1.0.0", | ||||
|         "inherits": "~2.0.3", | ||||
|         "isarray": "~1.0.0", | ||||
|         "process-nextick-args": "~2.0.0", | ||||
|         "safe-buffer": "~5.1.1", | ||||
|         "string_decoder": "~1.1.1", | ||||
|         "util-deprecate": "~1.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/readable-stream/node_modules/safe-buffer": { | ||||
|       "version": "5.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", | ||||
|       "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" | ||||
|     }, | ||||
|     "node_modules/safe-buffer": { | ||||
|       "version": "5.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", | ||||
| @@ -629,6 +743,27 @@ | ||||
|         "node": ">= 0.8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/streamsearch": { | ||||
|       "version": "1.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", | ||||
|       "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", | ||||
|       "engines": { | ||||
|         "node": ">=10.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/string_decoder": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", | ||||
|       "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", | ||||
|       "dependencies": { | ||||
|         "safe-buffer": "~5.1.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/string_decoder/node_modules/safe-buffer": { | ||||
|       "version": "5.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", | ||||
|       "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" | ||||
|     }, | ||||
|     "node_modules/toidentifier": { | ||||
|       "version": "1.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", | ||||
| @@ -649,6 +784,11 @@ | ||||
|         "node": ">= 0.6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/typedarray": { | ||||
|       "version": "0.0.6", | ||||
|       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", | ||||
|       "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" | ||||
|     }, | ||||
|     "node_modules/unpipe": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", | ||||
| @@ -657,6 +797,11 @@ | ||||
|         "node": ">= 0.8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/util-deprecate": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", | ||||
|       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" | ||||
|     }, | ||||
|     "node_modules/utils-merge": { | ||||
|       "version": "1.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", | ||||
| @@ -672,6 +817,14 @@ | ||||
|       "engines": { | ||||
|         "node": ">= 0.8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/xtend": { | ||||
|       "version": "4.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", | ||||
|       "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", | ||||
|       "engines": { | ||||
|         "node": ">=0.4" | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -5,7 +5,8 @@ | ||||
|     "body-parser": "^1.16.0", | ||||
|     "bootstrap": "^5.3.2", | ||||
|     "express": "^4.18.2", | ||||
|     "jquery": "^3.7.1" | ||||
|     "jquery": "^3.7.1", | ||||
|     "multer": "^1.4.5-lts.1" | ||||
|   }, | ||||
|   "description": "https://nodejsdev.ru/guides/metanit/express-api/", | ||||
|   "main": "app.js", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user