From 24347a2156e9f6e04782a7fbb9327ce7f02c859d Mon Sep 17 00:00:00 2001 From: "Leon.kov" Date: Wed, 8 Nov 2023 14:56:16 +0300 Subject: [PATCH] feat: add json-server --- json-server/db.json | 30 +++++++++++++++++++++++ json-server/index.js | 57 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 json-server/db.json create mode 100644 json-server/index.js diff --git a/json-server/db.json b/json-server/db.json new file mode 100644 index 0000000..824beed --- /dev/null +++ b/json-server/db.json @@ -0,0 +1,30 @@ +{ + "posts": [ + { + "id": 1, + "title": "json-server", + "userId": 1 + }, + { + "id": 2, + "title": "json-server", + "userId": 2 + } + ], + "comments": [ + { + "id": 1, + "body": "some comment", + "postId": 1 + } + ], + "users": [ + { + "id": 1, + "username": "admin", + "password": "123" + } + ], + "profile": { "name": "typicode" } +} + diff --git a/json-server/index.js b/json-server/index.js new file mode 100644 index 0000000..66f77a3 --- /dev/null +++ b/json-server/index.js @@ -0,0 +1,57 @@ +const fs = require('fs'); +const jsonServer = require('json-server'); +const path = require('path'); + +const server = jsonServer.create(); + +const router = jsonServer.router(path.resolve(__dirname, 'db.json')); + +server.use(jsonServer.defaults({})); +server.use(jsonServer.bodyParser); + +// Нужно для небольшой задержки, чтобы запрос проходил не мгновенно, имитация реального апи +server.use(async (req, res, next) => { + await new Promise((res) => { + setTimeout(res, 800); + }); + next(); +}); + +// Эндпоинт для логина +server.post('/login', (req, res) => { + try { + const { username, password } = req.body; + const db = JSON.parse(fs.readFileSync(path.resolve(__dirname, 'db.json'), 'UTF-8')); + const { users = [] } = db; + + const userFromBd = users.find( + (user) => user.username === username && user.password === password, + ); + + if (userFromBd) { + return res.json(userFromBd); + } + + return res.status(403).json({ message: 'User not found' }); + } catch (e) { + console.log(e); + return res.status(500).json({ message: e.message }); + } +}); + +// проверяем, авторизован ли пользователь +// eslint-disable-next-line +server.use((req, res, next) => { + if (!req.headers.authorization) { + return res.status(403).json({ message: 'AUTH ERROR' }); + } + + next(); +}); + +server.use(router); + +// запуск сервера +server.listen(8000, () => { + console.log('server is running on 8000 port'); +});