feat: implement SSE real-time frontend updates on new payload reception
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 57s
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 57s
This commit is contained in:
@@ -143,6 +143,12 @@ app.post('/api/data', authenticateAPIKey, async (req, res) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
await client.query('COMMIT');
|
await client.query('COMMIT');
|
||||||
|
|
||||||
|
// Broadcast update to all connected SSE clients
|
||||||
|
const broadcastMessage = `data: {"type": "update"}\n\n`;
|
||||||
|
for (const clientRes of sseClients) {
|
||||||
|
clientRes.write(broadcastMessage);
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
await client.query('ROLLBACK');
|
await client.query('ROLLBACK');
|
||||||
console.error("Database insert error:", error);
|
console.error("Database insert error:", error);
|
||||||
@@ -152,6 +158,13 @@ app.post('/api/data', authenticateAPIKey, async (req, res) => {
|
|||||||
})();
|
})();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.listen(PORT, '0.0.0.0', () => {
|
||||||
|
console.log(`Nexstar Backend running at http://localhost:${PORT}`);
|
||||||
|
console.log(`Endpoint for n8n: POST http://localhost:${PORT}/api/data`);
|
||||||
|
}); }
|
||||||
|
})();
|
||||||
|
});
|
||||||
|
|
||||||
app.listen(PORT, '0.0.0.0', () => {
|
app.listen(PORT, '0.0.0.0', () => {
|
||||||
console.log(`Nexstar Backend running at http://localhost:${PORT}`);
|
console.log(`Nexstar Backend running at http://localhost:${PORT}`);
|
||||||
console.log(`Endpoint for n8n: POST http://localhost:${PORT}/api/data`);
|
console.log(`Endpoint for n8n: POST http://localhost:${PORT}/api/data`);
|
||||||
|
|||||||
@@ -36,6 +36,27 @@ const Layout = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
loadInitial();
|
loadInitial();
|
||||||
|
|
||||||
|
// Set up SSE for real-time updates
|
||||||
|
const API_URL = import.meta.env.VITE_API_URL || '/api';
|
||||||
|
const sse = new EventSource(`${API_URL}/stream`);
|
||||||
|
|
||||||
|
sse.onmessage = (event) => {
|
||||||
|
try {
|
||||||
|
const data = JSON.parse(event.data);
|
||||||
|
if (data.type === 'update') {
|
||||||
|
fetchData().then(newData => {
|
||||||
|
setOrdersData(newData);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("SSE parse error", e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
sse.close();
|
||||||
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user