[[:oktatas:web:back-end_framework:express|< Express]] ====== Express - Cors 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 ===== Szerver ===== Készítsünk egy egyszerű express szervert. Legyen a projektkönyvtár neve api. Tegyük Node.js projektté, majd telepítsük az express csomagot. A szerver állományait az **app** nevű könyvtárban fogjuk elhelyezni. mkdir api cd api npm init -y npm install express mkdir app { "type": "module", } Az útválasztás a routes.js fájlban: import Router from 'express' const router = Router() router.get('/msg', (req, res) => { res.json({ message: 'mehet'}) }) export default router A szerver belépési pontja, az index.js fájl tartalma: import express from 'express' import router from './routes.js' const app = express() app.use(express.json()) app.use(router) const PORT = process.env.PORT || 8000 app.listen(PORT, () => { console.log(`Server running on port ${PORT}`) }) Indítsuk el, például így: node app Ha Insomnia, Postman, HTTPie, Resen (res) vagy curl segítségével nézem meg az API-t, nincs probléma. Teszteljük valamelyik HTTP klienssel. Például res ((Telepítés: npm install --global resen)) paranccsal: res localhost:8000/msg ===== Készítsünk klienst ===== Készítsünk egy weblapot Node.js projektként: mkdir web cd web npm init -y mkdir src Legyen egy egyszerű weblap, ami futtat egy fetch() függvényt, az eredményt pedig a konzolon szeretnénk látni. fetch('http://localhost:8000/msg') .then((res) => res.json()) .then((data) => console.log(data)) Futtassuk weblapunkat egy szerveren, például browser-sync. Telepítés: npm install browser-sync Írjunk egy egyszerű indító scriptet: { "scripts": { "start": "browser-sync src" } } Ha el van indítva az API szerver indítsuk el a webes felület szerverét is. npm start A webes felület a böngészőben megnézve, nyissuk meg a fejlesztői felület konzol részét. Ehhez hasonló hibát kapunk: 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. A konzolon Cors beállítási problémákat látunk. ===== A cors beállítása ===== Az API szerveren telepítsük a cors csomagot: npm install cors //... import cors from 'cors' app.use(cors()) //... Ezzel a beállítással már működik, de így mindenhonnan beenged a klienseket. Szabályozhatjuk honnan engedélyezzük. Egy teljesebb kóddal: import express from 'express' import router from './routes.js' const app = express() import cors from 'cors' const corsOptions = { origin: 'http://localhost:8000' } app.use(cors(corsOptions)) app.use(express.json()) app.use(router) const PORT = process.env.PORT || 8000 app.listen(PORT, () => { console.log(`Server running on port ${PORT}`) }) ===== Néhány lehetőség ===== Több hely is megadható tömbként: const corsOptions = { origin: [ 'http://localhost:3000', 'http://192.168.10.20:3000' ], } Bárhonnan beengedés: const corsOptions = { origin: '*' } Így olyan mintha opciók nélkül futtatnánk. ===== Linkek ===== Lásd még: * https://expressjs.com/en/resources/middleware/cors.html (2025)