Tovább a tartalomhoz

Hibaelhárítás

Ez az oldal segít a leggyakoribb problémák megoldásában és részletezi a fallback mechanizmus működését.

const notificationStore = getNotificationStore();
console.log('Connected:', notificationStore.isConnected);

Várható eredmény:

  • true — Socket.IO működik, valós idejű értesítések
  • false — Fallback mód, 30s polling

Szerver konzol:

Terminál
[Socket.IO] Client connected: abc123
[Socket.IO] User registered: 123
[Socket.IO] Notification sent to user: 123

Kliens konzol:

Terminál
[NotificationStore] Connected to Socket.IO
[NotificationStore] New notification received via WebSocket: {...}
[NotificationStore] About to show toast for notification: 1

Ha a Socket.IO nem elérhető, a fallback automatikusan aktiválódik:

Terminál
# Kliens konzol
[NotificationStore] Connection error: ...
[NotificationStore] WebSocket disconnected, polling for notifications

Megoldás: Nincs teendő, a rendszer automatikusan fallback módba vált.

4. Dev Módban Használd a Reload Funkciót

Szekció neve “4. Dev Módban Használd a Reload Funkciót”
await notificationStore.reload();
SzempontSocket.IO (Elsődleges)REST API (Fallback)
KésleltetésAzonnali (< 100ms)30 másodperc
Hálózati forgalomMinimálisKözepes (polling)
MegbízhatóságMagasNagyon magas
HasználatAutomatikusAutomatikus fallback
AktiválásKapcsolódáskorSocket.IO hiba esetén
Terminál
# Állítsd le a Socket.IO szervert
# A kliens automatikusan fallback módba vált
Terminál
[NotificationStore] Disconnected from Socket.IO
[NotificationStore] WebSocket disconnected, polling for notifications
await sendNotification({
userId: 123,
title: { hu: 'Teszt', en: 'Test' },
message: { hu: 'Fallback mód teszt', en: 'Fallback mode test' },
type: 'info'
});
// Az értesítés 30 másodpercen belül megjelenik
+layout.svelte
<script>
import { Toaster } from 'svelte-sonner';
</script>
<Toaster />

Megoldás: Add hozzá a Toaster komponenst a layout-hoz.

2. Ellenőrizd az Értesítés Típusát

Szekció neve “2. Ellenőrizd az Értesítés Típusát”

Critical típusú értesítések nem jelennek meg toast-ként, hanem modal dialog-ban.

// ❌ Nem jelenik meg toast
await sendNotification({
userId: 123,
title: 'Kritikus',
message: 'Ez modal dialog-ban jelenik meg',
type: 'critical'
});
// ✅ Megjelenik toast
await sendNotification({
userId: 123,
title: 'Info',
message: 'Ez toast-ban jelenik meg',
type: 'info'
});
Terminál
[NotificationStore] About to show toast for notification: 1
[NotificationStore] Toast imported successfully
[NotificationStore] Showing toast: { title: '...', message: '...', type: 'info' }

Probléma: Socket.IO Nem Fut Dev Módban

Szekció neve “Probléma: Socket.IO Nem Fut Dev Módban”

Tünet: isConnected mindig false

Megoldás: A rendszer automatikusan fallback módba vált. Használd a reload() metódust manuális frissítéshez:

const notificationStore = getNotificationStore();
await notificationStore.reload();

Probléma: Toast Értesítések Nem Jelennek Meg Dev Módban

Szekció neve “Probléma: Toast Értesítések Nem Jelennek Meg Dev Módban”

Tünet: Új értesítések nem jelennek meg automatikusan

Megoldás: A reload() metódus automatikusan megjeleníti a toast-ot az új értesítésekhez:

// notification-demo app-ban
if (import.meta.env.DEV) {
setTimeout(() => {
notificationStore.reload();
}, 500);
}

Probléma: Értesítések Nem Frissülnek Automatikusan

Szekció neve “Probléma: Értesítések Nem Frissülnek Automatikusan”

Tünet: Új értesítések csak oldal frissítés után jelennek meg

Ok: Socket.IO nem fut, és a polling még nem indult el

Megoldás: Várj 30 másodpercet, vagy használd a reload() metódust:

await notificationStore.reload();

Csak saját értesítéseket lehet törölni. Ellenőrizd, hogy a userId egyezik-e a bejelentkezett felhasználóval.

// ✅ Jó - saját értesítés törlése
await notificationStore.deleteNotification(myNotificationId);
// ❌ Hiba - más felhasználó értesítésének törlése
await notificationStore.deleteNotification(otherUserNotificationId);
Terminál
# Sikeres törlés
[API] Notification deleted: 123
# Sikertelen törlés
[API] Error deleting notification: Unauthorized
console.log('Notification permission:', Notification.permission);

Lehetséges értékek:

  • granted — Engedélyezve
  • denied — Letiltva
  • default — Még nem kérte el
if (Notification.permission === 'default') {
await Notification.requestPermission();
}

3. Ellenőrizd a Böngésző Támogatást

Szekció neve “3. Ellenőrizd a Böngésző Támogatást”
if (!('Notification' in window)) {
console.error('Browser does not support notifications');
}

Kritikus Értesítések Nem Jelennek Meg

Szekció neve “Kritikus Értesítések Nem Jelennek Meg”

Ellenőrizd a CriticalNotificationDialog Komponenst

Szekció neve “Ellenőrizd a CriticalNotificationDialog Komponenst”
Desktop.svelte
<script>
import CriticalNotificationDialog from '$lib/components/core/CriticalNotificationDialog.svelte';
</script>
<CriticalNotificationDialog />

Megoldás: Add hozzá a CriticalNotificationDialog komponenst a Desktop komponenshez.

// ✅ Jó - critical típus
await sendNotification({
userId: 123,
title: 'Kritikus',
message: 'Ez modal dialog-ban jelenik meg',
type: 'critical'
});
// ❌ Rossz - error típus (toast-ban jelenik meg)
await sendNotification({
userId: 123,
title: 'Hiba',
message: 'Ez toast-ban jelenik meg',
type: 'error'
});

Ha túl sok értesítés van, a lista lassú lehet.

Megoldás: Használj pagination-t vagy töröld a régi értesítéseket:

// Összes értesítés törlése
await notificationStore.deleteAllNotifications();
// Vagy csak a régiek törlése (server-side)
await notificationRepository.deleteOlderThan(30); // 30 napnál régebbiek

Ha a polling túl gyakori, növeld az intervallumot:

notificationStore.svelte.ts
setInterval(() => {
if (browser && !this.state.isConnected) {
this.loadNotifications();
}
}, 60000); // 60 másodperc helyett 30
notificationStore.svelte.ts
console.log('[NotificationStore] Connected:', this.state.isConnected);
console.log('[NotificationStore] Notifications:', this.state.notifications);
console.log('[NotificationStore] Unread count:', this.state.unreadCount);

Nyisd meg a böngésző DevTools Network tab-ját és szűrj a következőkre:

  • socket.io — WebSocket kapcsolat
  • /api/notifications — REST API hívások

Használd a Svelte DevTools-t az állapot követésére:

Terminál
# Telepítés
npm install -D @sveltejs/vite-plugin-svelte-inspector
lib/server/socket/index.ts
logger.info('[Socket.IO] Notification sent to user:', userId);
logger.info('[Socket.IO] Unread count:', unreadCount);
HibaOkMegoldás
Értesítések nem jelennek megSocket.IO nem futVárj 30s (fallback) vagy reload()
Toast nem jelenik megToaster komponens hiányzikAdd hozzá a layout-hoz
Critical dialog nem jelenik megCriticalNotificationDialog hiányzikAdd hozzá a Desktop-hoz
Értesítések nem törlődnekJogosultság hibaCsak saját értesítéseket törölhetsz
Browser értesítések nem működnekEngedély hiányzikKérj engedélyt a felhasználótól