[[: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'