‫Kursleiter: Machen wir
‫jetzt eine kleine Pause beim
‫Erstellen unserer API und erstellen Sie
‫ein lustiges kleines Skript, das die Tourdaten aus
‫unserer JSON-Datei in die MongoDB-Datenbank importiert.
‫Und ich war
‫mir nicht ganz sicher, ob ich dieses Video
‫in den Kurs einbauen sollte oder ob ich
‫das Skript einfach schon in den Kursstarterdateien mitbringen sollte.
‫Aber ich dachte, ich dachte, es wäre eine nette kleine
‫Übung und habe sie trotzdem aufgenommen.
‫Also, lass uns jetzt loslegen.
‫Im Grunde werden wir also ein
‫Skript erstellen, das einfach die Daten aus der
‫JSON-Datei wie gesagt in die Datenbank lädt.
‫Und dieses Skript ist
‫völlig unabhängig vom Rest unserer Express-Anwendung.
‫Und so führen wir dies komplett
‫getrennt von der Kommentarzeile aus, nur um alles einmal zu importieren.
‫Okay, lassen Sie mich das
‫Skript direkt hier im Datenordner erstellen.
‫Also neue
‫Datei,
‫Import, Dev-Daten. js.
‫Gut.
‫Also, was brauchen wir dafür?
‫Wir werden natürlich Mungos
‫brauchen, also fangen wir damit an.
‫Oder gehen wir einfach weiter zum Server. js-Datei und kopieren Sie
‫dieses Zeug, denn
‫warum sollten Sie es noch einmal schreiben.
‫Also lass uns alles kopieren
‫und dann löschen, was wir nicht brauchen.
‫Wir brauchen also nicht unsere Express-Bewerbung, wir brauchen
‫auch die . env-Paket,
‫weil wir unsere Umgebungsvariablen brauchen,
‫um uns wieder mit der Datenbank verbinden zu können, okay.
‫Und wir müssen in diesem Skript erneut eine
‫Verbindung zur Datenbank herstellen, da es völlig unabhängig
‫von der Express-Anwendung läuft.
‫Es wird am Anfang nur einmal ausgeführt.
‫Als nächstes benötigen wir Zugriff auf das Dateisystemmodul, da
‫wir natürlich die JSON-Datei lesen möchten.
‫Benötigen Sie also fs
‫und schließlich brauchen wir auch Zugriff auf das Tourmodell, denn
‫das Tourmodell ist
‫der Ort, an den wir die Touren schreiben möchten, oder?
‫Also, Tour ist gleich und
‫jetzt lasst uns den Weg dorthin finden,
‫also müssen wir von der Stelle, an der
‫wir uns gerade befinden, eine Ebene höher gehen.
‫Und was ist hier mit diesen Zitaten los?
‫In Ordnung, also eine Ebene
‫höher und wir sind in den Entwicklungsdaten.
‫Wir brauchen also eine weitere Ebene nach oben,
‫damit wir im Hauptordner sind.
‫Und von dort aus gehen wir in die Modelle
‫und in das Tourmodell ein.
‫Okay und das sollte es für die Einrichtung sein.
‫Beginnen wir nun mit dem Lesen der Datei.
‫Lesen Sie also die JSON-Datei und das
‫sollte ziemlich einfach sein.
‫Die Touren sind also bei fs. readfile und wir
‫können natürlich die synchrone Version verwenden.
‫Und sagen wir einfach Touren einfach. json, okay.
‫Und
‫dann auch noch die Kodierung.
‫Also, Dateicodierung, utf acht.
‫Sparen Sie.
‫Und so können wir jetzt die eigentliche
‫Funktion schreiben, die die Daten in die Datenbank importiert.
‫Importieren Sie also Daten in die Datenbank.
‫Okay, einfach so.
‫Und so erstellen wir diese Funktion.
‫Daten importieren, Daten importieren,
‫ja.
‫Und das wird
‫eine asynchrone Funktion sein, die
‫keine Argumente benötigt, also verwenden wir hier wieder einen try-catch-Block.
‫Und hier logge ich es einfach in die Konsole ein, wenn
‫ein Fehler auftritt,
‫nur um zu wissen, was in diesem Fall vor sich geht.
‫Und jetzt
‫hier, was wir tun werden, ist sehr einfach.
‫Wir werden
‫einfach warten, Tour. schaffen.
‫Also haben wir schon Tour genutzt. erstellen und
‫wir übergeben dann ein Objekt zurück dann richtig?
‫Aber die Methode create kann auch ein Array von Objekten akzeptieren.
‫Und in
‫diesem Fall wird dann einfach für jedes
‫Objekt im Array ein neues Dokument erstellt.
‫Also ganz
‫einfach, wir müssen hier nur unsere Tourendaten angeben, oder?
‫Und tatsächlich ist es nicht 100% richtig, denn
‫denken Sie daran, dass dies JSON ist.
‫Also müssen wir es zuerst mit json
‫tatsächlich in ein JavaScript-Objekt umwandeln. analysieren.
‫Okay, und jetzt haben wir tatsächlich
‫ein Array von
‫JavaScript-Objekten, die wir jetzt an die create-Methode übergeben können, okay.
‫Und wenn das
‫erfolgreich war, wird die nächste
‫Zeile ausgeführt und hier können wir sagen, dass die Daten
‫erfolgreich geladen wurden, in Ordnung.
‫Und dies sollte bereits den Job erledigen.
‫Was ist nun mit den Daten, die sich bereits in der Datenbank befinden?
‫Wir können auch eine
‫einfache Möglichkeit schaffen, alle diese Daten gleichzeitig zu löschen.
‫Also lass uns einfach weitermachen und das auch tun.
‫Also alle Daten aus der
‫Sammlung löschen, sagen wir.
‫Und diese seltsame gelbe Farbe, die Sie hier
‫sehen, stammt tatsächlich von einer Erweiterung, die ich hier installiert habe.
‫Um das loszuwerden,
‫schreibe ich einfach wieder die Datenbank, okay.
‫Löschen Sie also Daten
‫und dies wird wieder eine asynchrone Funktion ohne
‫Argumente sein.
‫Und lassen Sie mich diesen Code hier tatsächlich kopieren.
‫Also, löschen
‫Sie es und jetzt zum
‫Löschen selbst können wir die Funktion "Viele löschen" verwenden.
‫Okay, und tatsächlich habe ich
‫dir das hier im Intro zu MongoDB gezeigt, oder?
‫Wo wir viele löschen und
‫dann einfach nichts reinpassen könnten, und das
‫würde dann
‫alle Dokumente in einer bestimmten Sammlung löschen, oder?
‫Und so hat Mungo im
‫Grunde die gleiche Funktion hier auf dem Modell implementiert, okay.
‫In diesem
‫Fall hat das Tourmodell also Zugriff auf diese Methode zum
‫Löschen vieler, die dann
‫genau das gleiche macht wie delete many in der nativen MongoDB, oder?
‫Denken Sie also daran, dass
‫Mungo nur eine Abstraktionsschicht über MongoDB ist.
‫Aus diesem Grund verwendet es nicht genau die
‫gleichen Funktionen, aber es gibt uns dennoch Zugriff auf
‫einige ähnliche oder tatsächlich denselben Namen.
‫Viele löschen hat also tatsächlich
‫den gleichen Namen wie die native MongoDB-Funktion, in Ordnung?
‫Dies wird also wieder tun,
‫um einfach alle Dokumente in der Tourensammlung zu löschen.
‫Wir haben hier also unsere beiden Funktionen,
‫aber wenn wir diese Datei jetzt tatsächlich
‫ausführen, wird nichts passieren.
‫Und das
‫liegt daran, dass wir nirgendwo eine dieser Funktionen aufrufen, oder?
‫Jetzt könnten
‫wir einfach so etwas wie import data hier schreiben und dann einfach
‫die Funktion hier aufrufen, aber
‫ich wollte das ein bisschen mehr Spaß machen.
‫Lassen Sie uns nun ein kleines bisschen
‫über die Interaktion mit der Befehlszeile lernen, okay.
‫Und so werde
‫ich diese Datei tatsächlich ausführen, ohne eine dieser Funktionen aufzurufen.
‫Aber stattdessen werde
‫ich mich beim Konsolenprozess anmelden. argv, okay.
‫Nur damit wir sehen können, welcher Vorgang ausgeführt wird. argv ist eigentlich so,
‫dass wir es dann verwenden können.
‫Gut.
‫Lassen Sie mich hier ein anderes Terminal öffnen
‫und dann werde ich
‫den Knoten verwenden, in die Entwicklungsdaten
‫gehen, dann
‫in die Daten und dann dort die Entwicklungsdaten importieren.
‫Und wir bekommen hier einige Fehler.
‫Mal sehen wo.
‫Ah, ja, das liegt an
‫diesem Dateinamen.
‫Ich denke, wir sollten den Pfad dorthin grundsätzlich angeben.
‫Lassen Sie uns diesen also immer wieder
‫ausführen, und wir haben diesen Fehler.
‫Und ja, natürlich bekomme ich diesen Fehler.
‫Das ist dumm.
‫Denken Sie daran, wie
‫ich Ihnen gesagt habe, dass dieser Punkt hier immer relativ zu dem Ordner
‫ist, in dem die Knotenanwendung tatsächlich gestartet wurde.
‫Und das ist der Home-Ordner.
‫Also suchen wir im Grunde
‫nach dieser Datei hier im Home-Ordner, okay.
‫Was ich stattdessen verwenden sollte, ist der dir name, eine
‫Variable, die uns überall zur Verfügung steht.
‫Das geht also so.
‫Gut.
‫Speichern Sie es erneut,
‫räumen Sie die Konsole auf und führen Sie es erneut aus.
‫Und so funktioniert es jetzt.
‫Hier also
‫das Ergebnis dieser Konsole. log, das wir hier unten haben,
‫also verarbeiten. argv
‫und im Grunde ist
‫das ein Array dieser beiden Argumente für die Ausführung dieses Knotenprozesses.
‫Hier befindet sich
‫also im Grunde der Knotenbefehl.
‫Dies entspricht also diesem
‫Knoten und dann dem zweiten,
‫also ist dieser Pfad zu dieser Datei eigentlich dieser hier, okay.
‫Beenden wir dies hier und
‫fügen wir hier eine Art Option hinzu.
‫Also werde
‫ich schreiben, Bindestrich, Bindestrich importieren und
‫so bin ich sicher, dass Sie so
‫etwas schon oft gesehen haben.
‫Wenn wir zum Beispiel ein Paket als Dev-Abhängigkeit speichern,
‫machen wir das so.
‫Save dev, und deshalb verwenden wir
‫das gleiche Format zum Angeben von Optionen.
‫Okay, Bindestrich und
‫dann die Zeichenfolge, die wir hier setzen.
‫Und so entscheide ich mich, die Importoption
‫grundsätzlich so anzugeben.
‫Und Sie sehen, dass jetzt
‫das dritte Argument das Importieren von Bindestrichen ist, in Ordnung?
‫Das bedeutet, dass wir diese
‫Daten jetzt grundsätzlich hier verwenden können,
‫um
‫eine sehr einfache Befehlszeilenanwendung zu schreiben, die die Daten
‫importiert, wenn wir diese Option angeben, und
‫die Daten löscht,
‫wenn wir die Löschoption angeben, all rechts?
‫Also, lass uns das tatsächlich tun.
‫Also,
‫wenn Prozess. argv und es ist
‫ein
‫Array und wir wollen das dritte.
‫Also null, eins, zwei.
‫Wenn dieses Element also gut importiert werden
‫kann, möchten wir Importdaten ausführen.
‫Rechts?
‫Wenn...
‫Verfahren. argv zwei ist
‫gleich, zum Löschen
‫wollen wir dann Daten löschen
‫ausführen.
‫Und das ist es.
‫Das sollte uns also eigentlich
‫das Ergebnis liefern, nach dem wir suchen.
‫Lassen Sie uns das hier beenden.
‫Lassen Sie uns nun den Befehl
‫hier mit delete ausführen, um alle Daten zu löschen, die
‫wir in der Datenbank haben.
‫Also probieren wir das aus.
‫Es tut etwas
‫und die Daten wurden erfolgreich gelöscht.
‫Schauen wir uns das also jetzt an.
‫Und wenn wir jetzt diese Get-All-Tours-Route laufen lassen,
‫dann haben wir tatsächlich null Ergebnisse.
‫Also, alle unsere Touren sind jetzt weg.
‫Es hat also funktioniert.
‫Nun läuft dieser Prozess hier im Grunde noch.
‫Also lassen Sie uns
‫das schnell beheben, was ziemlich einfach ist.
‫Das ist also ein neues, das wir noch nicht verwendet haben.
‫Was ist ein Prozess. Ausfahrt, in
‫Ordnung?
‫Nun dieser Vorgang. exit ist eine aggressive Art,
‫eine Anwendung zu stoppen,
‫aber in diesem Fall ist es
‫kein Problem, weil es wirklich nur ein sehr
‫kleines Skript ist, das wir hier ausführen und keine echte Anwendung, oder?
‫Lassen Sie uns das
‫Gleiche hier in unsere Datenimportfunktion kopieren.
‫Und so werde ich jetzt damit aufhören.
‫Und nur um zu zeigen, dass es
‫funktioniert, werde ich
‫es erneut ausführen, damit die Daten
‫erfolgreich gelöscht werden und dann der Prozess beendet wird.
‫Gut.
‫Und jetzt ist es an der Zeit, die Funktion, die
‫uns ursprünglich interessiert hat, tatsächlich auszuführen.
‫Also im Grunde mit dem Import-Flag.
‫Also die Importoption.
‫Lassen Sie uns
‫das ausführen und sehen, ob es tatsächlich funktioniert.
‫Und das tat es nicht.
‫Warum also?
‫Es sagt uns hier also, dass eine Tour eine Gruppengröße haben muss.
‫Also woher kommt das?
‫Und wir sehen hier viele Validierungsfehler.
‫Hier muss also etwas schief gelaufen sein.
‫Also ja,
‫wir haben das Titelbild, wir haben die Tourbeschreibung.
‫Wir haben den Preis.
‫Nun, das ist seltsam.
‫Maximale Gruppengröße, lassen
‫Sie mich überprüfen, ob hier etwas passiert ist.
‫Eigentlich haben wir hier neun
‫Touren und ich denke, neun sind eigentlich alles, was wir haben.
‫Und für mich sieht es so aus, als ob es tatsächlich funktioniert hätte.
‫Aber lassen Sie uns hier einen kurzen Blick auf unsere Daten werfen.
‫Also, nur um herauszufinden, warum dies tatsächlich passiert.
‫Also Tour einfach hier und so
‫können wir
‫schon sehen, eigentlich das Problem, das passiert.
‫Wir haben also alle
‫diese Touren, also die Originalen.
‫Aber aus dem letzten Abschnitt
‫haben wir diese
‫drei hier, die wir mit unserer dateibasierten API hinzugefügt haben.
‫Erinnerst du dich also daran?
‫Also haben wir damals nur den Namen, die Dauer
‫und den Schwierigkeitsgrad angegeben und sonst nichts.
‫Und so
‫versucht unser Skript gerade, diese drei Touren zu importieren.
‫Aber natürlich interessieren wir uns überhaupt
‫nicht für sie, also lass uns das hier speichern, okay.
‫Dann beenden Sie diesen Vorgang und
‫damit eigentlich diesen Vorgang. exit kann sich außerhalb
‫des try-catch-Blocks befinden und am Ende der Funktion einfach
‫hier sein.
‫Unabhängig davon, ob
‫ein Fehler auftritt oder nicht, wird der Prozess immer einfach beendet.
‫Gut.
‫Also lass uns alles löschen.
‫Alles klar, lösche die Konsole noch einmal.
‫Jetzt importieren, und
‫ja.
‫Die Daten wurden also erfolgreich geladen.
‫Da sind wir tatsächlich wieder.
‫Jetzt funktioniert es zu 100%,
‫wir haben unsere Daten, mit denen wir jetzt arbeiten
‫können, und so, ja.
‫Unsere Arbeit mit diesem hier ist getan.
‫Also, eine nette kleine Funktion oder eigentlich
‫ein nettes kleines Skript.
‫Ich hoffe, dass für Sie alles Sinn ergab
‫und ja, dass es auch für Sie eine Art Spaß war.
‫Wie auch immer, wir sehen
‫uns im nächsten Video, wo wir endlich damit beginnen, all diese Daten zu
‫verwenden und unsere API zu
‫verbessern, indem wir ein paar nette Funktionen implementieren.