Projektarbeit-MYP/backend/COMMON_ERRORS.md

131 lines
3.6 KiB
Markdown

# Häufige Fehler und Lösungen
## API-Route-Fehler
### 1. Blueprint nicht registriert
**Problem:** API-Blueprint wird nicht registriert, führt zu 404-Fehlern
**Lösung:** Blueprint in app.py importieren und registrieren:
```python
from blueprints.api import api_bp
app.register_blueprint(api_bp)
```
### 2. Fehlende CSRF-Token bei POST-Requests
**Problem:** CSRF-Validierung schlägt fehl
**Lösung:** CSRF-Token in Templates einbinden oder API-Routen von CSRF befreien
### 3. Database Session nicht geschlossen
**Problem:** Database connections leak
**Lösung:** Immer try/finally verwenden:
```python
db_session = get_db_session()
try:
# Database operations
pass
finally:
db_session.close()
```
### 4. Fehlende Authentifizierung
**Problem:** @login_required decorator fehlt
**Lösung:** Alle geschützten Routen mit @login_required versehen
### 5. Falsche JSON-Response-Struktur
**Problem:** Frontend erwartet andere Datenstruktur
**Lösung:** Konsistente API-Response-Struktur verwenden:
```python
return jsonify({
"success": True/False,
"data": {...},
"error": "error message" # nur bei Fehlern
})
```
## Datenbankfehler
### 1. Relationship not loaded
**Problem:** Lazy loading von Relationships
**Lösung:** Eager loading verwenden:
```python
from sqlalchemy.orm import joinedload
jobs = session.query(Job).options(joinedload(Job.user)).all()
```
### 2. Session closed before accessing relationships
**Problem:** Zugriff auf Relationships nach Session.close()
**Lösung:** Alle benötigten Daten vor Session.close() laden
## Logging-Fehler
### 1. Logger nicht initialisiert
**Problem:** Logging funktioniert nicht
**Lösung:** Logger korrekt initialisieren:
```python
from utils.logging_config import get_logger
logger = get_logger("component_name")
```
## File-Upload-Fehler
### 1. Upload-Ordner existiert nicht
**Problem:** FileNotFoundError beim Upload
**Lösung:** Ordner erstellen:
```python
os.makedirs(upload_folder, exist_ok=True)
```
### 2. Unsichere Dateinamen
**Problem:** Path traversal vulnerability
**Lösung:** secure_filename() verwenden:
```python
from werkzeug.utils import secure_filename
filename = secure_filename(file.filename)
```
## Frontend-Integration-Fehler
### 1. CORS-Probleme
**Problem:** Cross-Origin-Requests werden blockiert
**Lösung:** CORS-Headers setzen oder Flask-CORS verwenden
### 2. Inkonsistente API-Endpunkte
**Problem:** Frontend ruft nicht existierende Endpunkte auf
**Lösung:** Systematische Überprüfung aller Frontend-API-Calls
### 3. Fehlende Error-Handling
**Problem:** Frontend kann Fehler nicht verarbeiten
**Lösung:** Konsistente Error-Response-Struktur implementieren
### 4. Admin-Dashboard-Fehler
**Problem:** Admin-Dashboard API-Routen fehlen
**Lösung:** Vollständige Admin-API implementieren:
```python
@app.route("/api/admin/users/create", methods=["POST"])
@login_required
def api_admin_create_user():
if not current_user.is_admin:
return jsonify({"error": "Keine Berechtigung"}), 403
# Implementation...
```
### 5. Fehlende Berechtigungsprüfung
**Problem:** Admin-Routen ohne Berechtigungsprüfung
**Lösung:** Immer Admin-Check einbauen:
```python
if not current_user.is_admin:
return jsonify({"error": "Keine Berechtigung"}), 403
```
## Performance-Probleme
### 1. N+1 Query Problem
**Problem:** Zu viele Datenbankabfragen
**Lösung:** Eager loading oder batch loading verwenden
### 2. Fehlende Indizes
**Problem:** Langsame Datenbankabfragen
**Lösung:** Indizes auf häufig abgefragte Spalten erstellen
### 3. Große Response-Größen
**Problem:** Langsame API-Responses
**Lösung:** Pagination und Feldfilterung implementieren