[[:oktatas:web:back-end_framework:express|< Express]]
====== Express - Kontrollerek ======
* **Szerző:** Sallai András
* Copyright (c) Sallai András, 2023
* Szerkesztve: 2024
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]]
* Web: https://szit.hu
===== Kontroller használta =====
Az előző fejezetben a routing-ban határoztuk meg, mit küldünk vissza
a kliens számára. Ezt most egy kontrollerre szeretnénk bízni.
A kontroller fogja elkérni az adatokat az adatbázistól.
A routing-ban pedig csak megmondjuk melyik kontrollert használjuk.
A kontrollereket JavaScript nyelven több módon is megvalósíthatjuk.
Ezek:
* osztály (class) használata
* objektumban függvények
* objektumban névtelen függvények
Az exportálást is meg lehet oldani több módon, erre most nem térünk ki.
Ha több kontrollerre számítunk, érdemes egy külön **controllers** nevű
könyvtárba tenni azokat.
==== A class használata ====
Az indexet elnevezést szoktuk használni a függvény vagy metódus számára, ha GET HTTP metódusra válaszolunk.
class EmployeeController {
index(req, res) {
res.send('műkdik');
}
}
module.exports = EmployeeController;
A routing-t a következő példában egy **routes** nevű könyvtárba fogjuk tenni,
az állomány pedig **api.js** lesz.
A routingban ekkor így hivatkozunk a kontrollerre:
const EmployeeController = require('../controllers/employeecontrollers');
router.get('/employees', EmployeeController.prototype.index);
==== Objektumban függvény ====
const EmployeeController = {
index(req, res) {
res.send('műkdik');
}
}
module.exports = EmployeeController;
A routingban ekkor így hivatkozunk:
const EmployeeController = require('../controllers/employeecontrollers');
router.get('/employees', EmployeeController.index);
==== Objektumban névtelen függvény ====
Egy index nevű tulajdonságot hozunk létre. Az érték pedig egy névtelen függvény.
const EmployeeController = {
index: (req, res) => {
res.send('műkdik');
}
}
module.exports = EmployeeController;
A routingban ekkor így hivatkozunk:
const EmployeeController = require('../controllers/employeecontrollers');
router.get('/employees', EmployeeController.index);
===== Dolgozók =====
Készítsünk egy projektet. Ebben a projektben a routingot egy routes könyvtárba, azon belül az api.js fájlba tesszük. Készítünk egy controllers könyvtárat, abba tesszük a kontrollereket. A projekt neve legyen emp.
emp/
|-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 index() függvénnyel:
const EmployeeController = {
index(req, res) {
res.send('műkdik');
}
}
module.exports = EmployeeController;
Készítsünk hozzá egy routingot:
const Router = require('express');
const router = Router();
const EmployeeController = require('../controllers/employeecontrollers');
router.get('/employees', EmployeeController.index);
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ítás ====
Indítsuk el a szervert:
npm start
==== Tesztelés ====
Teszteljük például a HTTPie eszköz http paranccsával:
http localhost:8000/api/employees
===== Linkek =====
* https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/routes (2023)