suchen
HeimWeb-Frontendjs-TutorialNgSysV.A Serious Svelte InfoSys: Eine regelfreundliche Version

NgSysV.A Serious Svelte InfoSys: A Rules-friendly version

Diese Beitragsserie ist auf NgateSystems.com indiziert. Dort finden Sie auch eine äußerst nützliche Stichwortsuchfunktion.

Letzte Bewertung: 24. November

1. Einführung

In dieser Serie wurde zuvor beschrieben, wie Sie das Svelte-Framework in Verbindung mit der Firestore-Datenbank-Client-API von Google verwenden können, um schnell und unterhaltsam nützliche Informationssysteme zu entwickeln. Leider hat Beitrag 3.3 jedoch gezeigt, dass das ansonsten hervorragende Authentifizierungssystem von Firebase keine Firestore-Aktivitäten in serverseitigen Load()- und Actions()-Funktionen unterstützt, bei denen Datenbankregeln auf das Authentifizierungsobjekt verweisen.

Das Überspringen Ihrer Firestore-Autorisierungsregeln ist keine Option – ohne diese ist Ihre Datenbank für jeden offen, der die FirebaseConfig-Schlüssel aus Ihrer Webanwendung kapern kann. In diesem Beitrag werden Möglichkeiten beschrieben, den serverseitigen Svelte-Code so zu überarbeiten, dass er auf der Clientseite ausgeführt wird, während die Firestore-Regeln fest in Kraft bleiben.

2. Überarbeitung „kompromittierter“ Load()-Funktionen

Nicht alle Load()-Funktionen sind vom Vorhandensein von Firestore-Regeln betroffen. Diejenigen, die auf Firestore-öffentliche-Sammlungen verweisen, werden weiterhin problemlos serverseitig ausgeführt. Die Client-API ist weiterhin in den page.server.js-Dateien verfügbar – sie funktioniert jedoch nicht, wenn sie aufgefordert wird, durch Authentifizierung geschützte Sammlungen zu verwenden.

Wenn Ihre Load()-Funktion öffentliche Dateien adressiert und Sie einfach serverseitiges Debuggen vermeiden möchten, können Sie Ihre Load()-Funktion in eine page.js-Datei verschieben. Dies funktioniert genau wie eine page.server.js-Datei – Svelte führt die Funktion weiterhin automatisch beim Laden aus. Dies geschieht jedoch jetzt clientseitig, wo es im Browser debuggt werden kann. Weitere Informationen finden Sie in der Svelte-Dokumentation unter „Laden von Daten“

Allerdings muss eine „kompromittierte“ Load()-Funktion (in der Regel dort, wo Firestore-Regeln verwendet werden, um sicherzustellen, dass Benutzer nur auf ihre eigenen Daten zugreifen können) in clientseitigen Code verlagert werden. Typischerweise wird dies in eine neue, entsprechend benannte Funktion im <script> umgearbeitet. Abschnitt der zugehörigen page.svelte-Datei.</script>

Aber jetzt müssen Sie einen Weg finden, Ihre verschobene Load()-Funktion automatisch bei der Seiteninitialisierung zu starten – Sie profitieren nicht mehr von den integrierten Vorkehrungen von Svelte für native Load()-Funktionen. Das Problem besteht darin, dass Ihre verschobene Funktion asynchron ist und daher nicht direkt über das <script> einer page.svelte-Datei gestartet werden kann. Abschnitt. Dieses Problem wird durch die Verwendung des onMount-Dienstprogramms von Svelte gelöst.</script>

„OnMount“ ist ein Svelte-Lebenszyklus-„Hook“, der automatisch ausgeführt wird, wenn eine Webanwendungsseite gestartet wird. Innerhalb eines onMount() können Sie jetzt sicher auf Ihre verschobene Funktion „load()“ warten – Sie erinnern sich vielleicht, dass Sie sie früher in der Funktion „logout“ getroffen haben. Eine Beschreibung finden Sie bei Svelte Lifecycle Hooks.

3. Überarbeitung „kompromittierter“ Actions()-Funktionen

In diesem Fall gibt es keine Optionen. Kompromittierte Actions()-Funktionen müssen in das<script> verschoben werden. Abschnitt der übergeordneten Datei page.svelte. Hier müssen die Schaltflächen zum Senden von Formularen überarbeitet werden, um die Aktion über on:click-Anordnungen auszulösen, die auf die verschobene Funktion verweisen.</script>

4. Beispiel: Regelfreundliche Versionen der Produktanzeigeseite

In den folgenden Codebeispielen zeigt eine neue Route „products-display-rf“ die alte Liste „Magical Products“ mit Produktnummern an. Das hier verwendete Load() ist nicht beeinträchtigt, aber sein Code wird dennoch in eine page.js-Datei verschoben, damit Sie bestätigen können, dass Sie es im Browser debuggen können. Die einzigen weiteren Änderungen sind:

  • Der Code enthält jetzt die Erweiterungen, um das Feld „productDetails“ anzuzeigen, wenn auf einen Produkteintrag in der Liste „Magische Produkte“ geklickt wird.
  • firebase-config wird jetzt aus der im letzten Beitrag vorgestellten lib-Datei importiert
// src/routes/products-display-rf/+page.svelte
<script>
    export let data;
</script>

<div>





<pre class="brush:php;toolbar:false">// src/routes/products-display-rf/+layout.svelte
<header>
    <h2>





<pre class="brush:php;toolbar:false">// routes/products-display-rf/+page.js
import { collection, query, getDocs, orderBy } from "firebase/firestore";
import { db } from "$lib/utilities/firebase-client"

export async function load() {

  const productsCollRef = collection(db, "products");
  const productsQuery = query(productsCollRef, orderBy("productNumber", "asc"));
  const productsSnapshot = await getDocs(productsQuery);

  let currentProducts = [];

  productsSnapshot.forEach((product) => {
    currentProducts.push({ productNumber: product.data().productNumber });
  });

  return { products: currentProducts }
}
// src/routes/products-display-rf/[productNumber]/+page.svelte
<script>
  import { goto } from "$app/navigation";
  export let data;
</script>

<div>





<pre class="brush:php;toolbar:false">// src/routes/products-display-rf/[productNumber]/+page.js
import { collection, query, getDocs, where } from "firebase/firestore";
import { db } from "$lib/utilities/firebase-client";

export async function load(event) {
  const productNumber = parseInt(event.params.productNumber, 10);

  // Now that we have the product number, we can fetch the product details from the database

  const productsCollRef = collection(db, "products");
  const productsQuery = query(productsCollRef, where("productNumber", "==", productNumber));
  const productsSnapshot = await getDocs(productsQuery);
  const productDetails = productsSnapshot.docs[0].data().productDetails;

  return {
    productNumber: productNumber, productDetails: productDetails
  };
}

Kopieren Sie diesen Code in neue Dateien in Ordnern mit dem Suffix „-rf“. Aber seien Sie dabei vorsichtig – die Arbeit mit vielen verwirrenden Auslagerungsdateien in den engen Ordnerhierarchien von VSCode erfordert höchste Konzentration. Wenn Sie fertig sind, führen Sie Ihren Entwicklungsserver aus und testen Sie die neue Seite unter der Adresse http://localhost:5173/products-display-rf.

Die Seite „Produktanzeige“ sollte genauso aussehen wie zuvor, aber wenn Sie durchklicken, sollte die Seite „Produktdetails“ jetzt dynamisch generierte Inhalte anzeigen.

5. Beispiel: Regelfreundliche Version der Produktwartungsseite

Eher interessanter sieht es in einer clientseitigen Version der Produktwartungsseite aus.

Da Ihre Firebase-Regel für die Produktsammlung jetzt auf die Authentifizierung verweist (und daher erfordert, dass potenzielle Benutzer „angemeldet“ sind), ist die Funktion actions(), die ein neues Produktdokument hinzufügt, gefährdet. Daher muss dies aus der Datei „page.server.js“ verschoben und in die übergeordnete Datei „page.svelte“ verschoben werden.

Hier wird die Funktion in handleSubmit() umbenannt und durch eine on:submit={handleSubmit}-Klausel auf der

-Klausel „ausgelöst“. das die Produktdaten sammelt.

Obwohl die Produktwartungsseite keine Load()-Funktion hat, ist onMount dennoch in der aktualisierten Pagesvelte-Datei enthalten. Dies liegt daran, dass onMount eine nützliche Möglichkeit bietet, Benutzer sinnvoll umzuleiten, die versuchen, die Wartungsseite auszuführen, bevor sie sich angemeldet haben.

Prüfen Sie, ob Sie der unten aufgeführten Logik in einer neuen Datei „products-maintenance-rf/ page.svelte“ und einer aktualisierten Datei „/login/ page.svelte“ folgen können.

// src/routes/products-maintenance-rf/+page.svelte
<script>
    import { onMount } from "svelte";
    import { collection, doc, setDoc } from "firebase/firestore";
    import { db } from "$lib/utilities/firebase-client";
    import { goto } from "$app/navigation";
    import { auth } from "$lib/utilities/firebase-client";
    import { productNumberIsNumeric } from "$lib/utilities/productNumberIsNumeric";

    let productNumber = '';
    let productDetails = '';
    let formSubmitted = false;
    let databaseUpdateSuccess = null;
    let databaseError = null;

    let productNumberClass = "productNumber";
    let submitButtonClass = "submitButton";

    onMount(() => {
        if (!auth.currentUser) {
            goto("/login?redirect=/products-maintenance-rf");
            return;
        }
    });

    async function handleSubmit(event) {
        event.preventDefault(); // Prevent default form submission behavior
        formSubmitted = false; // Reset formSubmitted at the beginning of each submission

        // Convert productNumber to an integer
        const newProductNumber = parseInt(productNumber, 10);
        const productsDocData = {
            productNumber: newProductNumber,
            productDetails: productDetails,
        };

        try {
            const productsCollRef = collection(db, "products");
            const productsDocRef = doc(productsCollRef);
            await setDoc(productsDocRef, productsDocData);

            databaseUpdateSuccess = true;
            formSubmitted = true; // Set formSubmitted only after successful operation

            // Clear form fields after successful submission
            productNumber = '';
            productDetails = '';
        } catch (error) {
            databaseUpdateSuccess = false;
            databaseError = error.message;
            formSubmitted = true; // Ensure formSubmitted is set after error
        }
    }
</script>

Das obige ist der detaillierte Inhalt vonNgSysV.A Serious Svelte InfoSys: Eine regelfreundliche Version. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
JavaScript -Engines: Implementierungen vergleichenJavaScript -Engines: Implementierungen vergleichenApr 13, 2025 am 12:05 AM

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Jenseits des Browsers: JavaScript in der realen WeltJenseits des Browsers: JavaScript in der realen WeltApr 12, 2025 am 12:06 AM

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Apr 11, 2025 am 08:23 AM

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)Apr 11, 2025 am 08:22 AM

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript: Erforschung der Vielseitigkeit einer WebspracheJavaScript: Erforschung der Vielseitigkeit einer WebspracheApr 11, 2025 am 12:01 AM

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Die Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenDie Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenApr 10, 2025 am 09:33 AM

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

Entmystifizieren JavaScript: Was es tut und warum es wichtig istEntmystifizieren JavaScript: Was es tut und warum es wichtig istApr 09, 2025 am 12:07 AM

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Ist Python oder JavaScript besser?Ist Python oder JavaScript besser?Apr 06, 2025 am 12:14 AM

Python eignet sich besser für Datenwissenschaft und maschinelles Lernen, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python ist bekannt für seine prägnante Syntax- und Rich -Bibliotheks -Ökosystems und ist für die Datenanalyse und die Webentwicklung geeignet. 2. JavaScript ist der Kern der Front-End-Entwicklung. Node.js unterstützt die serverseitige Programmierung und eignet sich für die Entwicklung der Vollstapel.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor