4.7 KiB
4.7 KiB
JavaScript-Fehler-Behebungen für MYP System
🔧 Durchgeführte Korrekturen
1. DoNotDisturb Manager - suppressNotification Methode
Problem:
TypeError: window.dndManager.suppressNotification is not a function
Ursache:
Die DoNotDisturbManager Klasse hatte keine suppressNotification
Methode, aber die Notification-Manager versuchten diese aufzurufen.
Lösung:
// Methode hinzugefügt zu DoNotDisturbManager
suppressNotification(message, type) {
if (!this.isEnabled) return false;
// Wichtige Nachrichten (Fehler) nicht unterdrücken
if (type === 'error' || type === 'danger') return false;
// Nachricht zur Liste der unterdrückten hinzufügen
this.suppressedMessages.push({
message,
type,
timestamp: new Date().toISOString()
});
this.incrementSuppressedCount();
console.log(`🔕 Benachrichtigung unterdrückt: ${message}`);
return true;
}
Betroffene Dateien:
backend/templates/base.html
backend/templates/base-optimized.html
2. Session Status API - Unauthentifizierte Benutzer
Problem:
SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
Ursache:
Der /api/session/status
Endpoint leitete nicht-authentifizierte Benutzer zur Login-Seite um (HTML) anstatt JSON zurückzugeben.
Lösung:
@app.route("/api/session/status", methods=["GET"])
def api_session_status(): # Kein @login_required mehr
"""API-Endpunkt für Session-Status"""
try:
# Für nicht-authentifizierte Benutzer
if not current_user.is_authenticated:
return jsonify({
"success": False,
"authenticated": False,
"message": "Nicht angemeldet"
})
# ... Rest der Funktion
Betroffene Dateien:
backend/app.py
3. Drucker-Anzeige - Offline Drucker
Problem: Offline oder inaktive Drucker wurden nicht angezeigt.
Ursache:
Die API filterte nur aktive Drucker (Printer.active == True
).
Lösung:
# Vorher:
total_printers = db_session.query(Printer).filter(Printer.active == True).count()
# Nachher:
total_printers = db_session.query(Printer).count() # Alle Drucker
active_printers = db_session.query(Printer).filter(Printer.active == True).count() # Zusätzlich
Betroffene Dateien:
backend/app.py
-/api/stats
Endpoint
📋 Test-Schritte
1. DoNotDisturb Manager testen:
// In der Browser-Konsole:
window.dndManager.toggle(); // DND aktivieren
window.showToast("Test-Nachricht", "info"); // Sollte unterdrückt werden
window.showToast("Fehler!", "error"); // Sollte NICHT unterdrückt werden
2. Session Status testen:
// Nicht angemeldet:
fetch('/api/session/status')
.then(r => r.json())
.then(data => console.log(data));
// Sollte JSON mit authenticated: false zurückgeben
3. Drucker-Anzeige testen:
// Alle Drucker abrufen:
fetch('/api/printers')
.then(r => r.json())
.then(data => console.log(`${data.count} Drucker gefunden`));
// Sollte ALLE Drucker anzeigen, auch offline
🚀 Weitere Empfehlungen
1. JavaScript Error Handling verbessern:
// Global Error Handler hinzufügen
window.addEventListener('error', function(event) {
console.error('Global Error:', event.error);
// Optional: An Server senden für Monitoring
});
2. API Response Konsistenz:
- Alle API-Endpoints sollten konsistente Response-Strukturen haben
- Immer JSON zurückgeben, auch bei Fehlern
- Keine HTML-Redirects in API-Endpoints
3. Frontend Resilience:
// Bessere Fehlerbehandlung in API-Calls
async function apiCall(url, options = {}) {
try {
const response = await fetch(url, options);
// Prüfe Content-Type
const contentType = response.headers.get("content-type");
if (!contentType || !contentType.includes("application/json")) {
throw new Error("Server returned non-JSON response");
}
const data = await response.json();
if (!response.ok) {
throw new Error(data.error || `HTTP ${response.status}`);
}
return data;
} catch (error) {
console.error(`API Error for ${url}:`, error);
throw error;
}
}
✅ Status
Alle drei Hauptprobleme wurden behoben:
- ✅ DoNotDisturb Manager -
suppressNotification
Methode hinzugefügt - ✅ Session Status API - JSON für nicht-authentifizierte Benutzer
- ✅ Drucker-Anzeige - Alle Drucker werden angezeigt
Das System sollte jetzt ohne JavaScript-Fehler funktionieren.