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.
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
{ "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 } ] }
json-server --watch employees.json --port 8000
Ellenőrzés:
curl localhost:8000/employees/2/
Portbeállítás:
Telepítsük a json-server csomagot:
npm install --save-dev json-server
Írjunk egy server.js nevű JavaScript programot:
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') })
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
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
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/
Módosítás PUT kéréssel.
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
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
curl localhost:3000/dolgozok?_sort=fullname&_order=asc
3 millió forintnál nagyobb fizetésű dolgozok:
curl localhost:3000/dolgozok?salary_gte=3000000
Operátorok lehetnek:
curl localhost:3000/dolgozok?q=Lajos
{ "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" } ] }
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.
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: