Creazione di un'applicazione per blogging utilizzando Angular & MongoDB Aggiungi post

Nella parte precedente della serie di tutorial del blog Angular, hai imparato come creare il ShowPostComponent per visualizzare l'elenco dei post sul blog nella home page. Sono stati recuperati i record che sono stati inseriti dalla shell MongoDB utilizzando l'endpoint dell'API REST creato.

In questo tutorial, creerai un nuovo componente chiamato AddPostComponent per fornire l'interfaccia utente per aggiungere un nuovo post del blog al database MongoDB.

Iniziare

Iniziamo clonando il codice sorgente dalla parte precedente della serie di tutorial.

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

Passare alla directory del progetto e installare le dipendenze richieste.

cd AddPost / client npm install cd AddPost / server npm install

Dopo aver installato le dipendenze, riavviare l'applicazione client e server.

cd AddPost / client npm start cd AddPost / server node app.js

Puntare il browser su http: // localhost: 4200 e l'applicazione dovrebbe essere in esecuzione.

Creazione del componente Aggiungi post

Iniziamo creando il AddPostComponent. Crea una cartella chiamata aggiungi-post dentro il src / app cartella. Dentro il aggiungi-post cartella, creare un file chiamato add-post.component.ts e aggiungi il seguente codice:

importare Component da '@ angular / core'; importare Post da '... /models/post.model'; @Component (selector: 'app-add-post', templateUrl: './add-post.component.html', styleUrls: ['./add-post.component.css']) classe di esportazione AddPostComponent costruttore ()  

Crea un file chiamato add-post.component.html e il seguente codice HTML:

Visualizzerai il componente Aggiungi post come popup.

Ora devi aggiungere il AddPostComponent al NgModule. Importa il AddPostComponent nel app.module.ts file.

importare AddPostComponent da './add-post/add-post.component';

Aggiungi il componente al NgModule dichiarazioni elenco. Ecco come appare:

importare BrowserModule da '@ angular / platform-browser'; import NgModule da '@ angular / core'; import ROUTING da './app.routing'; import FormsModule da '@ angular / forms'; import HttpClientModule da '@ angular / common / http'; importare RootComponent da './root/root.component'; importare LoginComponent da "./login/login.component"; import HomeComponent da './home/home.component'; import ShowPostComponent da './show-post/show-post.component'; importare AddPostComponent da './add-post/add-post.component'; @NgModule (dichiarazioni: [RootComponent, LoginComponent, HomeComponent, ShowPostComponent, AddPostComponent], importa: [BrowserModule, ROUTING, FormsModule, HttpClientModule], provider: [], bootstrap: [RootComponent]) classe di esportazione AppModule  

Per attivare il popup di aggiunta post, hai già aggiunto il data-obiettivo attributo al pulsante in home.component.html.

Salvare le modifiche precedenti e riavviare l'applicazione. Accedere all'applicazione e fare clic su Inserisci link nella home page. Avrai il AddPostComponent visualizzato come popup.

Implementazione della funzionalità Aggiungi post

Aggiungi il ngModel direttiva agli elementi di input per titolo e descrizione.

 

Aggiungere un clic direttiva al pulsante per chiamare il metodo per salvare il post del blog.

Importa il Inviare modello da src / app / models / post.model.ts nel add-post.component.ts file.

importare Post da '... /models/post.model';

Definire il inviare variabile nel add-post.component.ts file.

post pubblico: Post;

Definire il addPost metodo all'interno del add-post.component.ts file. Dal addPost metodo, convaliderà l'immesso titolo e descrizione ed effettuare una chiamata al metodo di servizio per chiamare l'API REST. Ecco come appare il metodo:

addPost () if (this.post.title && this.post.description) // chiama il metodo di servizio per aggiungere post else alert ('Title and Description required'); 

Creiamo il file di servizio per il componente AddPostComponent. Crea un file chiamato add-post.service.ts e aggiungi il seguente codice:

import Injectable da '@ angular / core'; importare HttpClient da '@ angular / common / http'; importare Post da '... /models/post.model'; @Injectable () classe di esportazione AddPostService costruttore (http: HttpClient privato) 

Dentro il AddPostService, creare un metodo chiamato addPost per effettuare la chiamata all'API REST.

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

Come visto nel codice sopra, hai fatto uso di HttpClient per rendere l'API chiamata e restituire il Osservabile.

Nel add-post.component.ts file all'interno del addPost metodo, ti iscriveresti al addPost metodo dal add-post.service.ts file.

this.addPostService.addPost (this.post) .subscribe (res => // risposta dalla chiamata API REST);

Ecco come add-post.component.ts aspetto del file:

importare Component da '@ angular / core'; importare AddPostService da './add-post.service'; importare Post da '... /models/post.model'; @Component (selector: 'app-add-post', templateUrl: './add-post.component.html', styleUrls: ['./add-post.component.css'], provider: [AddPostService] ) classe di esportazione AddPostComponent public post: Post; costruttore (addPostService privato: 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 ('Title and Description required');  

Creazione dell'API REST per aggiungere post

Creiamo un endpoint API REST per aggiungere il post del blog al database MongoDB. Nel server / app.js file, creare un endpoint API come mostrato:

app.post ('/ api / post / createPost', (req, res) => // inserisci i dettagli su MongoDB)

Innanzitutto, è necessario connettersi al database MongoDB utilizzando il Mangusta cliente.

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

Una volta stabilita la connessione, è necessario creare un oggetto modello usando il Inviare schema definito nel server / modello / post.js file. 

const post = new Post (titolo: req.body.title, descrizione: req.body.description)

Come visto nel codice sopra, hai creato l'oggetto Post usando il titolo e descrizione passato dalla richiesta req oggetto.

Chiama il salvare metodo sull'oggetto Post per salvare la voce in MongoDB.

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

Come visto nel codice sopra, una volta il salvare Il callback del metodo viene chiamato senza errori, restituirà il successo messaggio insieme all'oggetto restituito doc.

Ecco come appare l'endpoint dell'API REST:

app.post ('/ api / post / createPost', (req, res) => mongoose.connect (url, useMongoClient: true, function (err) if (err) gira err; const post = new Post (title: req.body.title, description: req.body.description) post.save ((err, doc) => if (err) throw err; return res.status (200) .json (stato : 'successo', dati: doc)));)

Salvare le modifiche precedenti e riavviare entrambi i server Angolare e Nodo. Accedi all'applicazione e prova ad aggiungere un nuovo post sul blog. Una volta che fai clic sul Inserisci pulsante, controlla la console del browser e avrai registrato la risposta positiva.

Quando i dettagli del post del blog vengono aggiunti correttamente al database, è necessario chiudere il popup. Per chiudere il popup, c'è un pulsante di chiusura che è necessario fare clic a livello di codice.

Userai il @ViewChild decoratore per accedere al pulsante di chiusura.

Importare ViewChild e ElementRef nel AddPostComponent.

import Component, ViewChild, ElementRef da '@ angular / core';

Dentro il AddPostComponent, definire la seguente variabile:

@ViewChild ('closeBtn') closeBtn: ElementRef;

Iniziare il closeBtn clicca usando il seguente codice:

this.closeBtn.nativeElement.click ();

Aggiungere il codice sopra al callback di successo di addPost metodo. Ecco il addPost metodo da 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 ('Title and Description required'); 

Salvare le modifiche e riavviare il server client. Accedi all'applicazione e prova ad aggiungere un nuovo post sul blog. Una volta che i dettagli del post del blog sono stati salvati correttamente, il popup si chiuderà.

Aggiornamento dell'elenco dei blog

Una cosa da notare è che il post del blog appena aggiunto non compare nell'elenco dei post del blog. Quindi è necessario aggiungere un trigger per notificare quando aggiornare il ShowPostComponent. Utilizzerai un servizio comune per comunicare tra i due componenti.

Crea una cartella chiamata servizio dentro il src / app cartella. Crea un file chiamato common.service.ts con il seguente codice:

import Injectable da '@ angular / core'; importare Subject da 'rxjs / Subject'; @Injectable () classe di esportazione CommonService public postAdded_Observable = new Subject (); constructor ()  notifyPostAddition () this.postAdded_Observable.next (); 

Come visto nel codice precedente, hai dichiarato un Soggetto chiamato postAdded_Observable per tenere traccia del nuovo post del blog aggiunta al database. Ogni volta che un nuovo post del blog viene aggiunto al database, chiamerai il notifyPostAddition metodo, che notificherà agli abbonati l'aggiornamento.

Importa il CommonService nel app.module.ts e includilo nel NgModule elenco dei fornitori. Ecco come appare:

importare BrowserModule da '@ angular / platform-browser'; import NgModule da '@ angular / core'; import ROUTING da './app.routing'; import FormsModule da '@ angular / forms'; import HttpClientModule da '@ angular / common / http'; importare RootComponent da './root/root.component'; importare LoginComponent da "./login/login.component"; import HomeComponent da './home/home.component'; import ShowPostComponent da './show-post/show-post.component'; importare AddPostComponent da './add-post/add-post.component'; import CommonService da './service/common.service'; @NgModule (dichiarazioni: [RootComponent, LoginComponent, HomeComponent, ShowPostComponent, AddPostComponent], importa: [BrowserModule, ROUTING, FormsModule, HttpClientModule], provider: [CommonService], bootstrap: [RootComponent]) classe di esportazione AppModule  

Importare CommonService nel show-post.component.ts file e inizializzarlo nel metodo del costruttore.

import CommonService da '... /service/common.service';
costruttore (private showPostService: ShowPostService, commonService privato: CommonService) 

Dentro il ngOnInit metodo, iscriviti al postAdded_Observable variabile e caricare il getAllPost metodo. Ecco come ngOnInit aspetto del metodo:

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

Importare CommonService nel add-post.component.ts file e chiama il notifyPostAddition metodo una volta aggiunto il post del blog. Ecco come addPost metodo dal AddPostComponent sembra:

addPost () if (this.post.title && this.post.description) this.addPostService.addPost (this.post) .subscribe (res => this.closeBtn.nativeElement.click (); this.commonService. notifyPostAddition (););  else alert ('Title and Description required'); 

Salvare le modifiche precedenti e riavviare il server client. Accedi all'applicazione e aggiungi un nuovo post sul blog. Una volta aggiunto, l'elenco dei post del blog viene aggiornato con il nuovo post del blog.

Avvolgendolo

In questo tutorial, hai creato il AddPostComponent per aggiungere i dettagli del post del blog al database MongoDB. Hai creato l'API REST per salvare un post del blog nel database MongoDB utilizzando il Mangusta cliente.

Nella parte successiva della serie, implementerai la funzionalità per modificare e aggiornare i dettagli del post del blog.

Il codice sorgente per questo tutorial è disponibile su GitHub.

Com'è stata la tua esperienza finora? Fammi sapere i tuoi preziosi suggerimenti nei commenti qui sotto.