Tartalomjegyzék
JSON szerver
- Szerző: Sallai András
- Copyright © 2021, Sallai András
- Szerkesztve: 2024
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
A json-server
A json-server JSON fájlokat szolgál ki, amelyek írását is lehetővé teszi. Létrehozható routing tábla, képes kiszolgálni statikus HTML oldalakat.
Indulás
A json-server-t használhatjuk globálisan telepítve, vagy lokálisan a projektbe telepítve.
Globális használathoz telepítés:
npm install --global json-server
Globálisan ellenőrzés:
json-server
Helyben, a projektbe telepítve:
npm init -y npm install --save-dev json-server
Helyben ellenőrzés:
npx json-server
Mintaadat
- employees.json
{ "employees": [ { "id": 1, "fullname": "Nagy János", "city": "Szolnok", "salary": 8400000 }, { "id": 2, "fullname": "Páros Lajos", "city": "Szeged", "salary": 3430000 }, { "id": 3, "fullname": "Aranyos Enikő", "city": "Szolnok", "salary": 4245000 } ] }
Szerverindítás
json-server --watch employees.json --port 8000
Ellenőrzés:
curl localhost:8000/employees/2/
Portbeállítás:
- -p --port
Beállítások
Node.js programként
Telepítsük a json-server csomagot:
npm install --save-dev json-server
Írjunk egy server.js nevű JavaScript programot:
- server.js
const json_server = require('json-server') const server = json_server.create() const router = json_server.router('db.json') const middlewares = json_server.defaults() server.use(middlewares) server.use(router) server.listen(3000, () => { console.log('JSON Szerver fut') })
Tesztelés axios csomaggal
Az axios csomaggal írhatunk egyszerű Node.js programokat, amelyek műveleteket hajtanak végre a json-server-en.
Az axios telepítése:
npm install --save-dev axios
GET kérés
- get_employees.js
const axios = require('axios'); axios.get('http://localhost:3000/dolgozok') .then(resp => { dolgozok = resp.data; dolgozok.forEach(dolgozo => { console.log(`${dolgozo.fullname}`); }); }) .catch(error => { console.log(error); });
node get_employees.js
PUT kérés
- add_employee.js
const axios = require('axios'); axios.post('http://localhost:3000/dolgozok', { id: 4, "fullname": "Bárány Tamás", "city": "Miskolc", "salary": 2850000 }).then(resp => { console.log(resp.data); }).catch(error => { console.log(error); });
Ellenőrzés:
curl localhost:3000/dolgozok/4/
PUT
Módosítás PUT kéréssel.
- modify_employee.js
const axios = require('axios'); axios.put('http://localhost:3000/dolgozok/4/', { "fullname": "Kék Tamás", "city": "Miskolc", "salary": 2850000 }).then(resp => { console.log(resp.data); }).catch(error => { console.log(error); });
cat dolgozok.json
DELETE kérés
- modify_employee.js
const axios = require('axios'); axios.delete('http://localhost:3000/dolgozok/3/', { }).then(resp => { console.log(resp.data); }).catch(error => { console.log(error); });
cat dolgozok.json
Rendezés
curl localhost:3000/dolgozok?_sort=fullname&_order=asc
Műveletek
3 millió forintnál nagyobb fizetésű dolgozok:
curl localhost:3000/dolgozok?salary_gte=3000000
Operátorok lehetnek:
- gte
- lte
Keresés
curl localhost:3000/dolgozok?q=Lajos
JSON fájl
- database.json
{ "employees": [ { "id": 1, "fullname": "Nagy János", "city": "Szolnok", "salary": 8400000 }, { "id": 2, "fullname": "Páros Lajos", "city": "Szeged", "salary": 3430000 }, { "id": 3, "fullname": "Aranyos Enikő", "city": "Szolnok", "salary": 4245000 } ], "assignment": [ { "id": 1, "name": "tesztelő" }, { "id": 2, "name": "mérnök" } ] }
Azonosítás tokennel
A json-server alapértelmezetten nem tud azonosítást. Ebben a fejezetben egy token kérését követeljük meg egy végponthoz.
A klienstől ezt várjuk a fejrészben:
Authorization: Bearer aaaa
A következő json-server egy Bearer tokent vár, amit négy darab „a” betű, de csak a /dolgozok végpont esetén.
- server.js
const jsonServer = require('json-server') const server = jsonServer.create() const router = jsonServer.router('db.json') const middlewares = jsonServer.defaults() server.use(middlewares) server.use((req, res, next) => { if(req.url == "/dolgozok") { if (isAuthorized(req)) { next() // continue to JSON Server router } else { res.sendStatus(401) } }else { next() } }) server.use(router) server.listen(3000, () => { console.log('JSON Server is running') }) function isAuthorized(req) { if(req.headers.authorization === undefined) { return } let token = req.headers.authorization.split(" ")[1]; if (token === "aaaa") { return true; }else { return false; } }
Teszt a curl klienssel:
curl -GET -H "Content-Type: application/json" -H "Authorization: Bearer: aaaa" "http://localhost:3000/dolgozok"
Felhasznált webhely: