From 817495cd256db1c86a58f6979cfe1a9c528532be Mon Sep 17 00:00:00 2001 From: ISA Date: Tue, 24 Sep 2024 12:20:14 +0200 Subject: [PATCH] Client liest die Platzhalter auf dem CPL --- app/dashboard/page.jsx | 46 ++++++++++++++++++++++----------------- components/DeviceData.jsx | 35 +++++++++++++++++++++++++++++ components/Header.jsx | 2 +- 3 files changed, 62 insertions(+), 21 deletions(-) create mode 100644 components/DeviceData.jsx diff --git a/app/dashboard/page.jsx b/app/dashboard/page.jsx index 0190ba3..778540a 100644 --- a/app/dashboard/page.jsx +++ b/app/dashboard/page.jsx @@ -3,39 +3,41 @@ import React, { useEffect, useState } from "react"; import "tailwindcss/tailwind.css"; import "@fontsource/roboto"; import "bootstrap-icons/font/bootstrap-icons.css"; +import DeviceData from "../../components/DeviceData"; function Dashboard() { - const [data, setData] = useState(null); + const [deviceData, setDeviceData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { - // Funktion zum Abrufen der ersetzten Platzhalterdaten vom Server - const fetchData = async () => { + // Funktion zum Abrufen der Gerätedaten von der Start.acp-Seite + const fetchDeviceData = async () => { try { - // Abrufen des Inhalts der Datei mit Platzhalterersetzung - const response = await fetch( - "http://localhost:3000/api/server?path=main.js", - { - mode: "cors", // stellt sicher, dass eine CORS-Anfrage gesendet wird - } - ); + // Relativer Pfad zur Start.acp-Datei + const response = await fetch("/CPL?Start.ACP", { + mode: "no-cors", // CORS-Einschränkungen vermeiden + }); + // Überprüfen, ob die Anfrage erfolgreich war if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } - const result = await response.text(); // Beachte, dass dies `text()` statt `json()` ist, da wir den JS-Inhalt bekommen wollen - setData(result); + // Die Antwort als Text verarbeiten (da es sich um HTML handelt) + const result = await response.text(); + + // Daten in den Zustand setzen + setDeviceData(result); setLoading(false); } catch (error) { - console.error("Error fetching data:", error); + console.error("Fehler beim Abrufen der Gerätedaten:", error); setError(error); setLoading(false); } }; - fetchData(); + fetchDeviceData(); }, []); return ( @@ -44,13 +46,17 @@ function Dashboard() { {/* Hauptinhalt */}

Letzten 20 Meldungen:

- {loading &&

Loading data...

} - {error &&

Error: {error.message}

} - {data && ( +
+

Gerätedaten

+ +
+ {loading &&

Lade Gerätedaten...

} + {error &&

Fehler: {error.message}

} + {deviceData && (
-

Ersetzte Datei-Inhalte:

- {/* Verwenden von dangerouslySetInnerHTML um den JS-Inhalt einzubinden */} -

+              

Ersetzte Daten aus Start.acp:

+ {/* Die gerenderten Daten mit dangerouslySetInnerHTML anzeigen */} +

             
)}
diff --git a/components/DeviceData.jsx b/components/DeviceData.jsx new file mode 100644 index 0000000..0c36ed1 --- /dev/null +++ b/components/DeviceData.jsx @@ -0,0 +1,35 @@ +import React, { useEffect, useState } from "react"; + +const DeviceData = () => { + const [deviceData, setDeviceData] = useState(""); + const [error, setError] = useState(null); + + useEffect(() => { + const fetchData = async () => { + try { + const response = await fetch("/api/fetchDeviceData"); + if (!response.ok) { + throw new Error(`Fehler beim Abrufen der Daten: ${response.status}`); + } + const data = await response.json(); + setDeviceData(data.content); // Die Daten aus der API-Antwort setzen + } catch (error) { + setError(error.message); + } + }; + + fetchData(); + }, []); + + return ( +
+ {error ? ( +

Fehler: {error}

+ ) : ( +
+ )} +
+ ); +}; + +export default DeviceData; diff --git a/components/Header.jsx b/components/Header.jsx index 39e5371..1e7d60b 100644 --- a/components/Header.jsx +++ b/components/Header.jsx @@ -9,7 +9,7 @@ function Header() { useEffect(() => { // API-Aufruf, um die Daten vom Server zu holen - fetch("http://localhost:3000/api/server", { mode: "cors" }) + fetch("http://localhost:3000/api/server?path=main.js", { mode: "cors" }) .then((response) => { if (!response.ok) { throw new Error("Fehler beim Abrufen der Daten");