Erstellen einer Blogging-App mit Angular & MongoDB Beitrag hinzufügen

Im vorherigen Teil der Angular-Blog-Lernreihe haben Sie gelernt, wie Sie das erstellen ShowPostComponent um die Liste der Blogbeiträge auf der Startseite anzuzeigen. Sie haben die Datensätze abgerufen, die mit dem erstellten REST-API-Endpunkt aus der MongoDB-Shell eingefügt wurden.

In diesem Lernprogramm erstellen Sie eine neue Komponente mit dem Namen AddPostComponent Die Benutzeroberfläche zum Hinzufügen eines neuen Blogbeitrags zur MongoDB-Datenbank bereitstellen.

Fertig machen

Beginnen wir mit dem Klonen des Quellcodes aus dem vorherigen Teil der Tutorialserie.

git clone https://github.com/royagasthyan/ShowPost AddPost

Navigieren Sie zum Projektverzeichnis und installieren Sie die erforderlichen Abhängigkeiten.

cd AddPost / Client npm install cd AddPost / Server npm installieren

Nachdem Sie die Abhängigkeiten installiert haben, starten Sie die Client- und Serveranwendung neu.

cd AddPost / client npm start cd AddPost / Serverknoten app.js

Richten Sie Ihren Browser auf http: // localhost: 4200, und Sie sollten die Anwendung ausführen.

Erstellen der Postkomponente hinzufügen

Beginnen wir mit dem Erstellen der AddPostComponent. Erstellen Sie einen Ordner mit dem Namen Add-Post in der src / app Mappe. In der Add-Post Erstellen Sie eine Datei mit dem Namen add-post.component.ts und fügen Sie den folgenden Code hinzu:

Component aus '@ angle / core' importieren; import Post aus '… /models/post.model'; @Component (Selektor: 'app-add-post', templateUrl: './add-post.component.html', styleUrls: ['./add-post.component.css']) Exportklasse AddPostComponent Konstruktor ()  

Erstellen Sie eine Datei mit dem Namen add-post.component.html und den folgenden HTML-Code:

Sie zeigen die Add-Post-Komponente als Popup an.

Jetzt müssen Sie das hinzufügen AddPostComponent zum NgModule. Importieren Sie die AddPostComponent in dem app.module.ts Datei.

import AddPostComponent aus './add-post/add-post.component';

Fügen Sie die Komponente dem hinzu NgModule Erklärungen Liste. So sieht es aus:

BrowserModule aus '@ angle / platform-browser' importieren; NgModule aus '@ angle / core' importieren; importiere ROUTING von './app.routing'; FormsModule aus '@ angle / forms' importieren; importiere HttpClientModule aus '@ angle / common / http'; importiere RootComponent aus './root/root.component'; LoginComponent aus './login/login.component' importieren; HomeComponent aus './home/home.component' importieren; import ShowPostComponent aus './show-post/show-post.component'; import AddPostComponent aus './add-post/add-post.component'; @NgModule (Deklarationen: [RootComponent, LoginComponent, HomeComponent, ShowPostComponent, AddPostComponent]), importiert: [BrowserModule, ROUTING, FormsModule, HttpClientModule], Anbieter: [], Bootstrap: [RootComponent]) Exportklasse AppModule  

Um das Popup zum Hinzufügen eines Postens auszulösen, haben Sie bereits das Datenziel Attribut der Schaltfläche in home.component.html.

Speichern Sie die obigen Änderungen und starten Sie die Anwendung erneut. Melden Sie sich bei der Anwendung an und klicken Sie auf Hinzufügen Link auf der Homepage. Sie werden die haben AddPostComponent als Popup angezeigt.

Implementierung der Funktion "Post hinzufügen"

Ergänzen Sie die ngModel Direktive zu den Eingabeelementen für Titel und Beschreibung.

 

Füge hinzu ein klicken Anweisung an die Schaltfläche zum Aufrufen der Methode zum Speichern des Blogposts.

Importieren Sie die Post Modell aus src / app / models / post.model.ts in dem add-post.component.ts Datei.

import Post aus '… /models/post.model';

Definiere das Post Variable in der add-post.component.ts Datei.

öffentliche Post: Post;

Definiere das addPost Methode innerhalb der add-post.component.ts Datei. Von dem addPost Methode, bestätigen Sie die Eingabe Titel und Beschreibung und rufen Sie die Servicemethode auf, um die REST-API aufzurufen. So sieht die Methode aus:

addPost () if (this.post.title && this.post.description) // Ruft die Servicemethode auf, um post hinzuzufügen else alert ('Titel und Beschreibung erforderlich'); 

Lassen Sie uns die Servicedatei für die Komponente erstellen AddPostComponent. Erstellen Sie eine Datei mit dem Namen add-post.service.ts und fügen Sie den folgenden Code hinzu:

import Injectable aus '@ angle / core'; HttpClient aus '@ angle / common / http' importieren; import Post aus '… /models/post.model'; @Injectable () Exportklasse AddPostService Konstruktor (privater http: HttpClient) 

In der AddPostService, Erstellen Sie eine Methode namens addPost um den REST-API-Aufruf auszuführen.

addPost (post: Post) return this.http.post ('/ api / post / createPost', title: post.title, Beschreibung: post.description)

Wie im obigen Code zu sehen ist, haben Sie die HttpClient machen Sie den API-Aufruf und geben Sie das zurück Beobachtbar.

In dem add-post.component.ts Datei in der addPost Methode, abonnieren Sie die addPost Methode aus der add-post.service.ts Datei.

this.addPostService.addPost (this.post) .subscribe (res => // Antwort vom REST-API-Aufruf);

Hier ist wie das add-post.component.ts Datei sieht:

Component aus '@ angle / core' importieren; importiere AddPostService von './add-post.service'; import Post aus '… /models/post.model'; @Component (Selector: 'app-add-post', templateUrl: './add-post.component.html', styleUrls: ['./add-post.component.css'], Anbieter: [AddPostService] ) Exportklasse AddPostComponent öffentlicher Beitrag: Beitrag; Konstruktor (privates addPostService: AddPostService) this.post = new Post ();  addPost () if (this.post.title && this.post.description) this.addPostService.addPost (this.post) .subscribe (res => console.log ('response is', res)) ;  else alert ('Titel und Beschreibung erforderlich');  

Erstellen der REST-API für das Hinzufügen eines Beitrags

Lassen Sie uns einen REST-API-Endpunkt zum Hinzufügen des Blogbeitrags zur MongoDB-Datenbank erstellen. In dem server / app.js Datei, erstellen Sie einen API-Endpunkt wie gezeigt:

app.post ('/ api / post / createPost', (req, res) => // füge die Details in MongoDB ein)

Zuerst müssen Sie mit der MongoDB-Datenbank eine Verbindung herstellen Mungo Klient.

mongoose.connect (url, useMongoClient: true, function (err) if (err) throw err; console.log ('Verbindung hergestellt'););

Nachdem die Verbindung hergestellt wurde, müssen Sie ein Modellobjekt mithilfe von erstellen Post Schema definiert in der server / model / post.js Datei. 

const post = neuer Beitrag (title: req.body.title, Beschreibung: req.body.description)

Wie im obigen Code zu sehen, haben Sie das Post-Objekt mithilfe von erstellt Titel und Beschreibung von der Anfrage übergeben req Objekt.

Ruf den sparen Methode für das Post-Objekt, um den Eintrag in MongoDB zu speichern.

post.save ((err, doc) => if (err) werfen err; return res.status (200) .json (status: 'success', data: doc)

Wie im obigen Code zu sehen, einmal die sparen Die Methode callback wird ohne Fehler aufgerufen Erfolg Nachricht zusammen mit dem zurückgegebenen Objekt doc.

So sieht der Endpunkt der REST-API schließlich aus:

app.post ('/ api / post / createPost') (req, res) => mongoose.connect (url, useMongoClient: true, Funktion (err) if (err) werfen err; const post = neuer Post (title: req.body.title, Beschreibung: req.body.description) post.save ((err, doc) => if (err) throw err; return res.status (200) .json (status : 'success', data: doc)));)

Speichern Sie die obigen Änderungen und starten Sie die Angular- und Knotenserver erneut. Melden Sie sich bei der Anwendung an und versuchen Sie, einen neuen Blogeintrag hinzuzufügen. Sobald Sie auf die Schaltfläche klicken Hinzufügen Schaltfläche, überprüfen Sie die Browserkonsole, und die Erfolgsantwort wird protokolliert.

Wenn die Blogpost-Details erfolgreich zur Datenbank hinzugefügt wurden, müssen Sie das Popup schließen. Um das Popup zu schließen, gibt es eine Schaltfläche zum Schließen, auf die Sie programmgesteuert klicken müssen.

Sie werden das verwenden @ViewChild Dekorateur, um auf die Schließen-Schaltfläche zuzugreifen.

Einführen ViewChild und ElementRef im AddPostComponent.

import Component, ViewChild, ElementRef aus '@ angle / core';

In der AddPostComponent, Definiere die folgende Variable:

@ViewChild ('closeBtn') closeBtn: ElementRef;

Initiiere die closeBtn Klicken Sie mit folgendem Code auf:

this.closeBtn.nativeElement.click ();

Fügen Sie den obigen Code zum Erfolgsrückruf des hinzu addPost Methode. Hier ist der addPost Methode aus add-post.component.ts.

addPost () if (this.post.title && this.post.description) this.addPostService.addPost (this.post) .subscribe (res => this.closeBtn.nativeElement.click (););  else alert ('Titel und Beschreibung erforderlich'); 

Speichern Sie die Änderungen und starten Sie den Client-Server neu. Melden Sie sich bei der Anwendung an und versuchen Sie, einen neuen Blogeintrag hinzuzufügen. Sobald die Blogpost-Details erfolgreich gespeichert wurden, wird das Popup-Fenster geschlossen.

Aktualisieren der Blogliste

Zu beachten ist, dass der neu hinzugefügte Blogeintrag nicht in der Blogeintragsliste angezeigt wird. Sie müssen also einen Auslöser hinzufügen, um zu benachrichtigen, wann das Update erfolgen soll ShowPostComponent. Sie verwenden einen gemeinsamen Dienst, um zwischen den beiden Komponenten zu kommunizieren.

Erstellen Sie einen Ordner mit dem Namen Bedienung in der src / app Mappe. Erstellen Sie eine Datei mit dem Namen common.service.ts mit dem folgenden Code:

import Injectable aus '@ angle / core'; Betreff aus 'rxjs / Betreff' importieren; @Injectable () Exportklasse CommonService public postAdded_Observable = new Betreff (); constructor ()  notifyPostAddition () this.postAdded_Observable.next (); 

Wie im obigen Code zu sehen ist, haben Sie eine Gegenstand namens postAdded_Observable um den neuen Blogbeitrag in der Datenbank zu verfolgen. Immer wenn ein neuer Blogeintrag zur Datenbank hinzugefügt wird, rufen Sie das an notifyPostAddition Methode, die die Abonnenten über die Aktualisierung informiert.

Importieren Sie die CommonService im app.module.ts und füge es in die NgModule Liste des Anbieters. So sieht es aus:

BrowserModule aus '@ angle / platform-browser' importieren; NgModule aus '@ angle / core' importieren; importiere ROUTING von './app.routing'; FormsModule aus '@ angle / forms' importieren; importiere HttpClientModule aus '@ angle / common / http'; importiere RootComponent aus './root/root.component'; LoginComponent aus './login/login.component' importieren; HomeComponent aus './home/home.component' importieren; import ShowPostComponent aus './show-post/show-post.component'; import AddPostComponent aus './add-post/add-post.component'; CommonService von './service/common.service' importieren; @NgModule (Deklarationen: [RootComponent, LoginComponent, HomeComponent, ShowPostComponent, AddPostComponent]), importiert: [BrowserModule, ROUTING, FormsModule, HttpClientModule], Anbieter: [CommonService], bootstrap: [RootComponent]) Exportklasse AppModule  

Einführen CommonService in dem show-post.component.ts Datei und initialisieren Sie es in der Konstruktormethode.

CommonService aus '… /service/common.service' importieren;
Konstruktor (private showPostService: ShowPostService, private commonService: CommonService) 

In der ngOnInit Methode, abonnieren Sie die postAdded_Observable Variable und laden Sie die getAllPost Methode. Hier ist wie das ngOnInit Methode sieht aus:

ngOnInit () this.getAllPost (); this.commonService.postAdded_Observable.subscribe (res => this.getAllPost ();); 

Einführen CommonService in dem add-post.component.ts Datei und rufen Sie die notifyPostAddition Methode, sobald der Blogbeitrag hinzugefügt wurde. Hier ist wie das addPost Methode aus der AddPostComponent sieht aus:

addPost () if (this.post.title && this.post.description) this.addPostService.addPost (this.post) .subscribe (res => this.closeBtn.nativeElement.click (); this.commonService). notifyPostAddition (););  else alert ('Titel und Beschreibung erforderlich'); 

Speichern Sie die obigen Änderungen und starten Sie den Client-Server erneut. Melden Sie sich bei der Anwendung an und fügen Sie einen neuen Blogeintrag hinzu. Nach dem Hinzufügen wird die Blogpostliste mit dem neuen Blogpost aktualisiert.

Verpacken

In diesem Lernprogramm haben Sie das erstellt AddPostComponent um die Blogpost-Details zur MongoDB-Datenbank hinzuzufügen. Sie haben die REST-API zum Speichern eines Blogposts in der MongoDB-Datenbank mithilfe von erstellt Mungo Klient.

Im nächsten Teil der Serie implementieren Sie die Funktionalität zum Bearbeiten und Aktualisieren der Blogpost-Details.

Der Quellcode für dieses Tutorial ist auf GitHub verfügbar.

Wie war deine bisherige Erfahrung? Lassen Sie mich Ihre wertvollen Vorschläge in den Kommentaren unten wissen.