[[:oktatas:web:back-end_framework:express|< Express]] ====== Express - Adatok fogadása ====== * **Szerző:** Sallai András * Copyright (c) 2023, Sallai András * Szerkesztve: 2024 * 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()); const express = require('express'); const app = express(); const router = require('./routes'); app.use(express.json()); app.use('/api',router); app.listen(8000, () => { console.log('Listening: localhost: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: yarn init -y pnpm install express pnpm install --save-dev nodemon Készítsük el a kontrollerünket, egyetlen store() függvénnyel: const EmployeeController = { store(req, res) { res.json(req.body.name); } } module.exports = EmployeeController; A store függvény visszaküldi a kapott értéket. Készítsünk hozzá egy routingot: const Router = require('express'); const router = Router(); const EmployeeController = require('../controllers/employeecontrollers'); router.post('/employees', EmployeeController.store); module.exports = router; Készítsük el a belépési pontot: const express = require('express'); const app = express(); const router = require('./routes/api'); app.use(express.json()); app.use('/api',router); app.listen(8000, () => { console.log('Listening: localhost:8000'); }); 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: http localhost:8000/api/employees http 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 ); } } module.exports = 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 ); } } module.exports = 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); module.exports = 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}); } } module.exports = 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); module.exports = router; Teszteljük a put metódust: http put localhost:8000/api/employees/30 name='Árpád'