81 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Example backend endpoint for receiving frontend logs
 | |
|  * Add this to your Express server (server/index.mjs)
 | |
|  */
 | |
| 
 | |
| // Add to your Express app:
 | |
| /*
 | |
| app.post('/api/log', express.json(), (req, res) => {
 | |
|   const logs = Array.isArray(req.body) ? req.body : [req.body];
 | |
|   
 | |
|   logs.forEach(log => {
 | |
|     const timestamp = new Date(log.ts).toLocaleString();
 | |
|     const event = log.event.padEnd(30);
 | |
|     const data = JSON.stringify(log.data || {});
 | |
|     
 | |
|     console.log(`[${timestamp}] ${event} ${data}`);
 | |
|     
 | |
|     // Optional: Store in database, send to monitoring service, etc.
 | |
|     // await db.logs.insert(log);
 | |
|     // await monitoring.track(log);
 | |
|   });
 | |
|   
 | |
|   res.json({ ok: true });
 | |
| });
 | |
| */
 | |
| 
 | |
| // Standalone example for testing:
 | |
| import express from 'express';
 | |
| import cors from 'cors';
 | |
| 
 | |
| const app = express();
 | |
| const PORT = 3001;
 | |
| 
 | |
| app.use(cors());
 | |
| app.use(express.json());
 | |
| 
 | |
| app.post('/api/log', (req, res) => {
 | |
|   const logs = Array.isArray(req.body) ? req.body : [req.body];
 | |
|   
 | |
|   console.log('\n=== FRONTEND LOGS RECEIVED ===');
 | |
|   logs.forEach(log => {
 | |
|     const timestamp = new Date(log.ts).toLocaleString();
 | |
|     const event = log.event.padEnd(30);
 | |
|     const route = log.context?.route || 'N/A';
 | |
|     const data = JSON.stringify(log.data || {}, null, 2);
 | |
|     
 | |
|     console.log(`
 | |
| ┌─────────────────────────────────────────────────────────────
 | |
| │ Event:     ${log.event}
 | |
| │ Time:      ${timestamp}
 | |
| │ Session:   ${log.sessionId}
 | |
| │ Route:     ${route}
 | |
| │ Theme:     ${log.context?.theme || 'N/A'}
 | |
| │ Data:      ${data}
 | |
| └─────────────────────────────────────────────────────────────
 | |
|     `);
 | |
|   });
 | |
|   
 | |
|   res.json({ ok: true });
 | |
| });
 | |
| 
 | |
| app.listen(PORT, () => {
 | |
|   console.log(`
 | |
| ╔════════════════════════════════════════════════════════════╗
 | |
| ║  Frontend Logging Test Server                              ║
 | |
| ║  Listening on http://localhost:${PORT}                        ║
 | |
| ║                                                            ║
 | |
| ║  Endpoint: POST /api/log                                   ║
 | |
| ║                                                            ║
 | |
| ║  Configure ObsiViewer to use:                              ║
 | |
| ║  endpoint: 'http://localhost:${PORT}/api/log'                ║
 | |
| ╚════════════════════════════════════════════════════════════╝
 | |
|   `);
 | |
| });
 | |
| 
 | |
| // Graceful shutdown
 | |
| process.on('SIGINT', () => {
 | |
|   console.log('\n\nShutting down logging server...');
 | |
|   process.exit(0);
 | |
| });
 |