[[:oktatas:web:back-end_framework:express|< Express]] ====== Express - Kezdés ====== * **Szerző:** Sallai András * Copyright (c) 2023, Sallai András * Szerkesztve: 2024, 2025 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Az Expressről ===== Az Express segítségével gyorsan készíthetünk webalkalmazást JavaScript nyelven, Node.js alapokon. Kezeli a HTTP kéréseket, támogatja a middleware használatát. ===== VSCode ===== Ajánlott bővítmény a VSCode számára: * Node.js Modules Intellisense ===== Projekt készítése ===== Készítsünk egy Node.js projektet: yarn init -y vagy: npm init -y A yarn parancs használata esetén, lesz egy ilyen package.json állományunk: { "name": "app04", "version": "1.0.0", "main": "index.js", "license": "MIT", } Az npm parancs esetén ez egy kicsit bővebb. Telepítsük az express csomagot: npm install express Használhatjuk az **pnpm** parancsot is. Hozzuk létre az app((Az src helyett app könyvtárat használunk, mivel nincs fordítás, ez fog futni.)) könyvtárban az index.js állományt, a következő tartalommal: const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('helló') }); app.listen(8000); Indítsunk el a szervert: node app Teszteljük curl, http vagy res paranccsal, vagy más HTTP klienssel (Postman, Insomnia, Insomnium, HTTPie). http localhost:8000 A szervert a Ctrl+C billentyűvel állíthatjuk le. ===== A listen() függvény ===== A listen() függvény képes fogadni második paraméterként egy callback függvényt. Írjunk egy névtelen függvényt, ami kiírja milyen porton fut a szerver: app.listen(8000, () => { console.log('Listening: localhost:8000'); }); Ha most elindítjuk a szervert, informál bennünket arról, hogy a localhost:8000 címen és porton figyel. A port változóba: const port = 8000; app.listen(port, () => { console.log(`Listening: localhost:${port}`); }); Vegyük észre, hogy console.log() paramétere már nem szimpla aposztrófok között van, helyette backtick karakterek szerepelnek. A változó behelyettesítés csak így működik. ===== Végpont ===== Most adjunk valamilyen végpontot a szerverünkhöz. Legyen például egy **product** nevű végpont: app.get('/product', (req, res) => { res.send('termék') }); A kódot tegyük a már meglévő app.get() függvény után. Indítsuk újra a szervert: node app Teszteljük: http localhost:8000/product ===== A nodemon ===== A **nodemon** (Node Monitor) lehetővé teszi, hogy ne kelljen minden fejlesztés után, újraindítanunk a szervert. Telepítsük: pnpm install --save-dev nodemon Írjunk egy scriptet a package.json fájlban: { "scripts": { "start": "nodemon app --watch app" } } Ha fut a szerver állítsuk le, majd indítsuk újra a start script segítségével: npm start Teszteljük az elérést: http localhost:8000/product ===== Külön routing ===== A végpontokkal (endpoint) határozzuk meg, hogy milyen URL-en keresztül kérdezhetünk le adatokat. Az ilyen információkat nevezzük routing-nak. A routing-t kül állományba tesszük, egy **routes.js** fájlba. const Router = require('express'); const router = Router(); router.get('/product', (req, res) => { res.send('termék') }); module.exports = router; Az index.js fájlban importáljuk a routes.js tartalmát: const express = require('express'); const app = express(); const router = require('./routes'); app.use('/api',router); app.listen(8000, () => { console.log('Listening: localhost:8000'); }); Vegyük észre, hogy az URL-be bekerült egy **/api** rész. Tesztelés: http localhost:8000/api/product ===== JSON válasz ===== A routes.js fájlban határozzuk meg, hogy mit küldünk a kérésre. Eddig szimpla szöveget küldtünk. A REST API szervereket általában JSON kommunikációval használjuk. JSON választ a json() függvénnyel készíthetünk: const Router = require('express'); const router = Router(); router.get('/product', (req, res) => { res.json({ name: 'memória'}); }); module.exports = router; ===== Metódusok ===== Minden HTTP metódushoz tartozik egy függvény: get(), post(), put(), path(), delete(). Vegyünk fel minden HTTP metódushoz egy routingot. const Router = require('express'); const router = Router(); router.get('/product', (req, res) => { res.json({ msg: 'get metódus'}); }); router.post('/product', (req, res) => { res.json({ msg: 'post metódus'}); }); router.put('/product', (req, res) => { res.json({ msg: 'put metódus'}); }); router.patch('/product', (req, res) => { res.json({ msg: 'patch metódus'}); }); router.delete('/product', (req, res) => { res.json({ msg: 'delete metódus'}); }); module.exports = router; Teszteljük HTTP klienssel. Például a http paranccsal (HTTPie része): http localhost:8000/api/product http post localhost:8000/api/product http put localhost:8000/api/product http patch localhost:8000/api/product http delete localhost:8000/api/product ===== create-sip használata ===== npm create sip@latest A futtatás során a következőt láthatjuk: npm create sip@latest > npx > create-sip ? Project name: › app01 Írjuk át a projekt nevét, például api névre. npm create sip@latest > npx > create-sip ✔ Project name: … api ? Project type: › - Use arrow-keys. Return to submit. ❯ Webpage - Simple webpage: index.html, style.css Web Bootstrap JavaScript Web Node.js ESBuild JavaScript ESBuild TypeScript hai mock API Express API Cancel Válasszuk az Express API lehetőséget: ✔ Project name: … api ? Project type: › - Use arrow-keys. Return to submit. Webpage Web Bootstrap JavaScript Web Node.js ESBuild JavaScript ESBuild TypeScript hai mock API ❯ Express API - Express API with simple Sequelize Cancel A következőket láthatjuk: Create a new Express API... ExpressJS REST API sablon created Read docs/user_doc.md Run next commands: cd api npm install node op key:generate npm run dev Egy ilyen könyvtárszerkezetet kapunk: api/ |-app/ | |-controllers/ | | |-authcontroller.js | | `-usercontroller.js | |-database/ | | `-database.js | |-middlewares/ | | `-authjwt.js | |-models/ | | `-user.js | |-routes/ | | `-api.js | `-index.js |-config/ | |-default.json | `-default.json.example |-docs/ | |-dev_doc.md | `-user_doc.md |-templates/ |-test/ |-tools/ |-nodemon.json |-op |-package.json `-README.md ==== Alkalmazás kulcs generálása ==== node op key:generate ==== Model létrehozása ==== node op create model employee ==== Kontroller létrehozása ==== node op create controller employee ==== Indítás ==== Fejlesztői szerver indítása: npm run start Production indítása: npm start