[[:oktatas:web:back-end_framework:express|< Express]]
====== Express - Adatok fogadása ES ======
* **Szerző:** Sallai András
* Copyright (c) 2025, Sallai András
* Szerkesztve: 2025
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]]
* Web: https://szit.hu
===== JSON adatok fogadása =====
REST API esetén az adatokat JSON formátumban szoktuk fogadni.
Az express beépítve tartalmaz egy köztes szoftvert erre a célra, csak használatba kell venni:
app.use(express.json());
import express from 'express'
const app = express()
import routes from './routes/api.js'
app.use(express.json()) // <--
app.use(routes)
app.listen(8000, () => {
console.log('Server running on port 8000')
})
===== Projekt készítése =====
Készítsünk egy receive nevű projektet.
receive/
|-app/
| |-controllers/
| |-routes/
| | `-api.js
| `-index.js
|-node_modules/
`-package.json
Az alkalmazás belépési pontja továbbra is az index.js fájl.
Telepítsük az express és a nodemon csomagokat:
npm init -y
npm install express
npm install --save-dev nodemon
{
"type": "module",
}
Készítsük el a kontrollerünket, egyetlen store() függvénnyel:
const EmployeeController = {
store(req, res) {
res.json(req.body.name)
}
}
export default EmployeeController
A store függvény visszaküldi a kapott értéket.
Készítsünk hozzá egy routingot:
import Router from 'express'
const router = Router()
import EmployeeController from '../controllers/employeecontroller.js'
router.post('/employees', EmployeeController.store)
export default router
Készítsük el a belépési pontot:
import express from 'express'
const app = express()
import routes from './routes/api.js'
app.use(express.json()) // <--
app.use('/api', routes)
const PORT = 8000
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`)
})
Készítsünk start scriptet:
{
"scripts": {
"start": "nodemon app --watch app"
},
}
Indítsuk el az szervert:
npm start
Ellenőrizzük a választ:
res localhost:8000/api/employees
res localhost:8000/api/employees name='Árpád'
Amikor nem küldünk adatokat, egy üres választ kell kapjunk.
Ha küldünk egy nevet, vissza kell kapjuk a nevet.
===== Érvényesség ellenőrzése =====
const EmployeeController = {
store(req, res) {
if(!req.body.name) {
res.status(400)
res.json({
success: false,
message: 'Bad request'
});
}
res.status(200)
res.json(req.body.name )
}
}
export default EmployeeController
===== Paraméterek fogadása =====
Az update és a delete művelet esetén az adott felhasználó azonosítóját paraméterként adjuk át az URL-ben. Például:
http://localost:8000/api/valami/28
A 28 paramétert adjuk át a mintában.
Egészítsük ki az EmployeeController-t egy delete() függvénnyel:
const EmployeeController = {
store(req, res) {
if(!req.body.name) {
res.status(400);
res.json({
success: false,
message: 'Bad request'
});
}
res.status(200);
res.json(req.params.id);
},
delete(req, res) {
if(!req.params.id) {
res.status(400);
res.json({
success: false,
message: 'Bad request'
});
}
res.status(200)
res.json(req.body.name );
}
}
export default EmployeeController;
A delete esetén egy azonosítót várunk paraméterként. A példánkban ezt is megvizsgáljuk, ha nem érkezett ilyen, akkor sikertelen kérés a válasz.
Vegyünk fel egy új útválasztási sort:
router.delete('/employees/:id', EmployeeController.delete);
A :id mondja meg, hogy "id" néven egy paramétert fogunk küldeni.
A teljes api.js ekkor:
const Router = require('express');
const router = Router();
const EmployeeController = require('../controllers/employeecontrollers');
router.post('/employees', EmployeeController.store);
router.delete('/employees/:id', EmployeeController.delete);
export default router;
===== Adatok frissítése - update =====
Egészítsük ki az EmployeeControllert egy update függvénnyel:
update(req, res) {
if(!req.params.id || !req.body.name) {
res.status(400);
res.json({
success: false,
message: 'Bad request'
});
}
res.status(201);
res.json({ id: req.params.id, name: req.body.name});
}
A teljes kód:
const EmployeeController = {
store(req, res) {
if(!req.body.name) {
res.status(400);
res.json({
success: false,
message: 'Bad request'
});
}
res.status(200)
res.json(req.body.name );
},
delete(req, res) {
if(!req.params.id) {
res.status(400);
res.json({
success: false,
message: 'Bad request'
});
}
res.status(200);
res.json(req.params.id);
},
update(req, res) {
if(!req.params.id || !req.body.name) {
res.status(400);
res.json({
success: false,
message: 'Bad request'
});
}
res.status(201);
res.json({ id: req.params.id, name: req.body.name});
}
}
export default EmployeeController;
Vegyünk fel hozzá egy új routingot:
router.put('/employees/:id', EmployeeController.update);
A teljes api.js:
const Router = require('express');
const router = Router();
const EmployeeController = require('../controllers/employeecontrollers');
router.post('/employees', EmployeeController.store);
router.delete('/employees/:id', EmployeeController.delete);
router.put('/employees/:id', EmployeeController.update);
export default router;
Teszteljük a put metódust:
res put localhost:8000/api/employees/30 name='Árpád'