dokumentacia
This commit is contained in:
parent
74f7d71e65
commit
8c129cdb76
@ -1,22 +1,22 @@
|
||||
|
||||
// =============================================================
|
||||
// server.js – Blog API server
|
||||
|
||||
// =============================================================
|
||||
// Používame Express.js – minimálny webový framework pre Node.js
|
||||
// Počúva na porte 3000 a odpovedá na HTTP požiadavky od frontendu
|
||||
|
||||
// =============================================================
|
||||
|
||||
const express = require('express');
|
||||
const cors = require('cors');
|
||||
const db = require('./db');
|
||||
const cors = require('cors');
|
||||
const db = require('./db');
|
||||
|
||||
const app = express();
|
||||
const app = express();
|
||||
const PORT = process.env.PORT || 3000;
|
||||
|
||||
|
||||
// -------------------------------------------------------------
|
||||
// MIDDLEWARE
|
||||
// Middleware sú funkcie, ktoré spracujú každý request
|
||||
// predtým, než sa dostane k nášmu kódu (route handleru)
|
||||
|
||||
// -------------------------------------------------------------
|
||||
|
||||
// Povolíme príjem JSON v tele requestu (napr. pri POST)
|
||||
app.use(express.json());
|
||||
@ -26,9 +26,9 @@ app.use(express.json());
|
||||
// Bez toho by prehliadač zablokoval požiadavky z inej domény/portu
|
||||
app.use(cors());
|
||||
|
||||
|
||||
// -------------------------------------------------------------
|
||||
// ROUTES – definujeme čo sa stane pri každej URL
|
||||
|
||||
// -------------------------------------------------------------
|
||||
|
||||
// GET /health – jednoduchý endpoint na overenie, že server beží
|
||||
// Používa sa napr. v Dockeri ako "healthcheck"
|
||||
@ -108,7 +108,9 @@ app.post('/api/posts', async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// PUT /api/posts/:id – upraví existujúci príspevok
|
||||
// Klient pošle nové dáta v tele requestu (JSON), my ich uložíme do DB
|
||||
// PUT = nahradíme celý zdroj novými dátami (na rozdiel od PATCH = čiastočná úprava)
|
||||
app.put('/api/posts/:id', async (req, res) => {
|
||||
const id = parseInt(req.params.id);
|
||||
|
||||
@ -116,6 +118,11 @@ app.put('/api/posts/:id', async (req, res) => {
|
||||
return res.status(400).json({ error: 'ID musí byť číslo' });
|
||||
}
|
||||
|
||||
// Ochrana pred prípadom keď body nie je sparsované
|
||||
if (!req.body || typeof req.body !== 'object') {
|
||||
return res.status(400).json({ error: 'Neplatné telo požiadavky' });
|
||||
}
|
||||
|
||||
const { title, content, category, excerpt } = req.body;
|
||||
|
||||
if (!title || !content) {
|
||||
@ -137,13 +144,11 @@ app.put('/api/posts/:id', async (req, res) => {
|
||||
|
||||
res.json(result.rows[0]);
|
||||
} catch (err) {
|
||||
console.error('Chyba pri úprave príspevku:', err.message);
|
||||
res.status(500).json({ error: 'Interná chyba servera' });
|
||||
console.error('Chyba pri úprave príspevku:', err.message, err.stack);
|
||||
res.status(500).json({ error: 'Interná chyba servera', detail: err.message });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
// DELETE /api/posts/:id – zmaže príspevok podľa ID
|
||||
app.delete('/api/posts/:id', async (req, res) => {
|
||||
const id = parseInt(req.params.id);
|
||||
@ -170,12 +175,12 @@ app.delete('/api/posts/:id', async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// -------------------------------------------------------------
|
||||
// SPUSTENIE SERVERA
|
||||
// app.listen() spustí server a začne počúvať na danom porte
|
||||
// '0.0.0.0' znamená: počúvaj na všetkých sieťových rozhraniach
|
||||
// (potrebné v Dockeri, inak by počúval len na localhost)
|
||||
|
||||
// -------------------------------------------------------------
|
||||
app.listen(PORT, '0.0.0.0', () => {
|
||||
console.log(`Backend server beží na porte ${PORT}`);
|
||||
});
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
|
||||
services:
|
||||
|
||||
# ── 1. DATABÁZA ─────────────────────────────────────────────
|
||||
# 1. DATABÁZA
|
||||
db:
|
||||
image: postgres:16-alpine # oficiálny obraz, alpine = menší
|
||||
container_name: blog-db
|
||||
|
||||
@ -30,13 +30,12 @@ server {
|
||||
# ── Reverse proxy pre API ──────────────────────────────────
|
||||
# Všetky requesty začínajúce /api sa presmerujú na backend
|
||||
location /api/ {
|
||||
# "backend" je názov služby v Docker Compose
|
||||
# Docker vyrieši toto meno na IP adresu backend kontajnera
|
||||
proxy_pass http://backend:3000;
|
||||
|
||||
# Hlavičky – informujeme backend o pôvodnom requeste
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_pass_request_body on;
|
||||
proxy_pass_request_headers on;
|
||||
proxy_request_buffering off;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user