Tartalomjegyzék

< NodeJS

JSON szerver

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:

Beállítások

A beállításokat egy json-server.json fájlba írjuk.

Például:

json-server.json
{
   "port": 8000
}

NodeJS programként

Telepítsük a json-server csomagot:

npm install --save-dev json-server 

Írjunk egy server.js nevű JavaScript prograot:

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ű NodeJS 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:

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:

Linkek

Források:

HTTP:

Middleware: