Client liest die Platzhalter auf dem CPL
This commit is contained in:
@@ -3,39 +3,41 @@ import React, { useEffect, useState } from "react";
|
|||||||
import "tailwindcss/tailwind.css";
|
import "tailwindcss/tailwind.css";
|
||||||
import "@fontsource/roboto";
|
import "@fontsource/roboto";
|
||||||
import "bootstrap-icons/font/bootstrap-icons.css";
|
import "bootstrap-icons/font/bootstrap-icons.css";
|
||||||
|
import DeviceData from "../../components/DeviceData";
|
||||||
|
|
||||||
function Dashboard() {
|
function Dashboard() {
|
||||||
const [data, setData] = useState(null);
|
const [deviceData, setDeviceData] = useState(null);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [error, setError] = useState(null);
|
const [error, setError] = useState(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Funktion zum Abrufen der ersetzten Platzhalterdaten vom Server
|
// Funktion zum Abrufen der Gerätedaten von der Start.acp-Seite
|
||||||
const fetchData = async () => {
|
const fetchDeviceData = async () => {
|
||||||
try {
|
try {
|
||||||
// Abrufen des Inhalts der Datei mit Platzhalterersetzung
|
// Relativer Pfad zur Start.acp-Datei
|
||||||
const response = await fetch(
|
const response = await fetch("/CPL?Start.ACP", {
|
||||||
"http://localhost:3000/api/server?path=main.js",
|
mode: "no-cors", // CORS-Einschränkungen vermeiden
|
||||||
{
|
});
|
||||||
mode: "cors", // stellt sicher, dass eine CORS-Anfrage gesendet wird
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
// Überprüfen, ob die Anfrage erfolgreich war
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
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
|
// Die Antwort als Text verarbeiten (da es sich um HTML handelt)
|
||||||
setData(result);
|
const result = await response.text();
|
||||||
|
|
||||||
|
// Daten in den Zustand setzen
|
||||||
|
setDeviceData(result);
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error fetching data:", error);
|
console.error("Fehler beim Abrufen der Gerätedaten:", error);
|
||||||
setError(error);
|
setError(error);
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
fetchData();
|
fetchDeviceData();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -44,13 +46,17 @@ function Dashboard() {
|
|||||||
{/* Hauptinhalt */}
|
{/* Hauptinhalt */}
|
||||||
<main className="flex-1 bg-white p-8 ml-4 shadow rounded-lg overflow-hidden">
|
<main className="flex-1 bg-white p-8 ml-4 shadow rounded-lg overflow-hidden">
|
||||||
<h1 className="text-2xl font-bold mb-4">Letzten 20 Meldungen:</h1>
|
<h1 className="text-2xl font-bold mb-4">Letzten 20 Meldungen:</h1>
|
||||||
{loading && <p>Loading data...</p>}
|
<div>
|
||||||
{error && <p className="text-red-500">Error: {error.message}</p>}
|
<h1>Gerätedaten</h1>
|
||||||
{data && (
|
<DeviceData />
|
||||||
|
</div>
|
||||||
|
{loading && <p>Lade Gerätedaten...</p>}
|
||||||
|
{error && <p className="text-red-500">Fehler: {error.message}</p>}
|
||||||
|
{deviceData && (
|
||||||
<div>
|
<div>
|
||||||
<h2>Ersetzte Datei-Inhalte:</h2>
|
<h2>Ersetzte Daten aus Start.acp:</h2>
|
||||||
{/* Verwenden von dangerouslySetInnerHTML um den JS-Inhalt einzubinden */}
|
{/* Die gerenderten Daten mit dangerouslySetInnerHTML anzeigen */}
|
||||||
<pre dangerouslySetInnerHTML={{ __html: data }}></pre>
|
<pre dangerouslySetInnerHTML={{ __html: deviceData }}></pre>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
35
components/DeviceData.jsx
Normal file
35
components/DeviceData.jsx
Normal file
@@ -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 (
|
||||||
|
<div>
|
||||||
|
{error ? (
|
||||||
|
<p>Fehler: {error}</p>
|
||||||
|
) : (
|
||||||
|
<div dangerouslySetInnerHTML={{ __html: deviceData }} />
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DeviceData;
|
||||||
@@ -9,7 +9,7 @@ function Header() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// API-Aufruf, um die Daten vom Server zu holen
|
// 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) => {
|
.then((response) => {
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error("Fehler beim Abrufen der Daten");
|
throw new Error("Fehler beim Abrufen der Daten");
|
||||||
|
|||||||
Reference in New Issue
Block a user