Angular 9 + Nodejs/Express + Mongoose CRUD MongoDB – Get/Post/Put/Delete

Angular 9 + Nodejs/Express + Mongoose CRUD MongoDB – Get/Post/Put/Delete

Mongoose is a MongoDB object modeling tool that provides a schema-based solution to model data. In the tutorial, we will show how to build get/post/put/delete requests from Angular 9 Client to MongoDB with NodeJs/Express RestAPIs using Mongoose ODM.

Related posts:
Node.js/Express RestAPIs – Angular 9 HttpClient – Get/Post/Put/Delete requests + Bootstrap 4
Crud RestAPIs with NodeJS/Express, MongoDB using Mongoose

Technologies

  • Angular 9
  • RxJS 6
  • Bootstrap 4
  • Visual Studio Code – version 1.24.0
  • Nodejs – v8.11.3
  • Mongoose
  • MongoDB

Demo

Overview

Goal

We create 2 projects:

– Angular Client Project:

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + angular-project-structure

– Node.js RestAPIs project:

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + nodejs-project-structure

UserCase

Start Node.js server -> Logs:


App listening at http://:::8080
Successfully connected to MongoDB.
Customer collection removed
>>> Done - Initial Data!

-> MongoDB’s documents:


> db.customers.find();
{ "_id" : ObjectId("5b432fb558cbf6427cc7d527"), "firstname" : "Joe", "lastname" : "Thomas", "age" : 36, "__v" : 0 }
{ "_id" : ObjectId("5b432fb558cbf6427cc7d528"), "firstname" : "Peter", "lastname" : "Smith", "age" : 18, "__v" : 0 }
{ "_id" : ObjectId("5b432fb558cbf6427cc7d529"), "firstname" : "Lauren", "lastname" : "Taylor", "age" : 31, "__v" : 0 }
{ "_id" : ObjectId("5b432fb558cbf6427cc7d52a"), "firstname" : "Mary", "lastname" : "Taylor", "age" : 24, "__v" : 0 }
{ "_id" : ObjectId("5b432fb558cbf6427cc7d52b"), "firstname" : "David", "lastname" : "Moore", "age" : 25, "__v" : 0 }
{ "_id" : ObjectId("5b432fb558cbf6427cc7d52d"), "firstname" : "Michael", "lastname" : "Brown", "age" : 45, "__v" : 0 }
{ "_id" : ObjectId("5b432fb558cbf6427cc7d52c"), "firstname" : "Holly", "lastname" : "Davies", "age" : 27, "__v" : 0 }

– Angular client retrieve all customers from Node.js RestAPIs:

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + retrieves-all-customers

– Angular client update a customer -> Change the firstname of first customer: ‘Joe’ to ‘Robert’.

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + update-customers

-> result:

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + update-results

– Delete ‘Peter’ customer:

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + delete-customers

– Add a new customer:

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + add-customers

-> result:

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + add-customers-results

– Check final customer’s list:

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + final-check-results

-> MongoDB’s documents:


> db.customers.find();
{ "_id" : ObjectId("5b434e5ce30d33364834a8e9"), "firstname" : "Robert", "lastname" : "Thomas", "age" : 36, "__v" : 0 }
{ "_id" : ObjectId("5b434e5ce30d33364834a8eb"), "firstname" : "Lauren", "lastname" : "Taylor", "age" : 31, "__v" : 0 }
{ "_id" : ObjectId("5b434e5ce30d33364834a8ec"), "firstname" : "Mary", "lastname" : "Taylor", "age" : 24, "__v" : 0 }
{ "_id" : ObjectId("5b434e5ce30d33364834a8ed"), "firstname" : "David", "lastname" : "Moore", "age" : 25, "__v" : 0 }
{ "_id" : ObjectId("5b434e5ce30d33364834a8ef"), "firstname" : "Michael", "lastname" : "Brown", "age" : 45, "__v" : 0 }
{ "_id" : ObjectId("5b434e5ce30d33364834a8ee"), "firstname" : "Holly", "lastname" : "Davies", "age" : 27, "__v" : 0 }
{ "_id" : ObjectId("5b435016e30d33364834a8f0"), "firstname" : "Maria", "lastname" : "Garcia", "age" : 39, "__v" : 0 }
>

Node.js/Express RestAPIs

Node.js exposes 5 RestAPIs as below:

  • router.post(‘/api/customers’, customers.create);
  • router.get(‘/api/customers’, customers.findAll);
  • router.get(‘/api/customers/:id’, customers.findOne);
  • router.put(‘/api/customers’, customers.update);
  • router.delete(‘/api/customers/:id’, customers.delete);

– Configure cross-origin for Angular-Client which running at port: 4200.


const cors = require('cors')
const corsOptions = {
  origin: 'http://localhost:4200',
  optionsSuccessStatus: 200
}
app.use(cors(corsOptions))

Angular 9 HttpClient

Use Angular HttpClient APIs to do Get/Post/Put/Delete requests to Node.js RestAPIs:


getCustomers (): Observable {
  return this.http.get(this.customersUrl)
}

getCustomer(id: string): Observable {
  const url = `${this.customersUrl}/${id}`;
  return this.http.get(url);
}

addCustomer (customer: Customer): Observable {
  return this.http.post(this.customersUrl, customer, httpOptions);
}

deleteCustomer (customer: Customer | string): Observable {
  const id = typeof customer === 'string' ? customer : customer._id;
  const url = `${this.customersUrl}/${id}`;

  return this.http.delete(url, httpOptions);
}

updateCustomer (customer: Customer): Observable {
  return this.http.put(this.customersUrl, customer, httpOptions);
}

Practice

Express Mongoose RestAPIs

Setting up NodeJs/Express project

Following the guide to create a NodeJS/Express project.

Install Express, Mongoose, Body-Parser, and Cors:


$npm install express mongoose body-parse cors --save

– Body-Parser -> Parse incoming request bodies in a middleware before your handlers, available under the req.body property.
– Express is one of the most popular web frameworks for NodeJs which is built on top of Node.js http module, and adds support for routing, middleware, view system etc.
– Cors is a mechanism that uses HTTP headers to tell a browser to let a web application running at one origin (domain) have permission to access selected resources from a server at a different origin.
– Sequelize is a promise-based ORM for Node.js v4 and up. It supports the dialects PostgreSQL, MySQL …

-> package.json file:


{
  "name": "nodejs-restapi-mongodb",
  "version": "1.0.0",
  "description": "NodeJs-RestApis-MongoDB",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "NodeJs-RestAPIs-MongoDB"
  ],
  "author": "JSA",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.18.2",
    "cors": "^2.8.4",
    "express": "^4.16.3",
    "mongoose": "^5.0.13",
    "npm": "^5.8.0"
  }
}

Mongoose Schema

– Create file ‘./app/models/customer.model.js’ ->


const mongoose = require('mongoose');
 
const CustomerSchema = mongoose.Schema({
    firstname: String,
    lastname: String,
	age: { type: Number, min: 18, max: 65, required: true }
});

Configure MongoDB’s URL

In the root folder, create a file ‘app/config/mongodb.config.js’ as below content ->


module.exports = {
    url: 'mongodb://localhost:27017/nodejs-demo'
}

Implement CRUD APIs

Routes ->

In the root folder, create a file ‘app/routes/customer.routes.js’ as below content ->


module.exports = function(app) {
 
    const customers = require('../controllers/customer.controller.js');
 
    // Create a new Customer
    app.post('/api/customers', customers.create);
 
    // Retrieve all Customer
    app.get('/api/customers', customers.findAll);
 
    // Retrieve a single Customer by Id
    app.get('/api/customers/:customerId', customers.findOne);
 
    // Update a Customer with Id
    app.put('/api/customers', customers.update);
 
    // Delete a Customer with Id
    app.delete('/api/customers/:customerId', customers.delete);
}

Controllers

In root folder ‘nodejs-restapi’, create a controller folder ‘/app/controllers’. Then create a file ‘/app/controllers/customer.controller.js’ that contains methods for executing above URL requests ->


const Customer = require('../models/customer.model.js');


// POST a Customer
exports.create = (req, res) => {
    // Create a Customer
    const customer = new Customer(req.body);

    // Save a Customer in the MongoDB
    customer.save()
    .then(data => {
        res.json(data);
    }).catch(err => {
        res.status(500).json({
            msg: err.message
        });
    });
};


// FETCH all Customers
exports.findAll = (req, res) => {
    Customer.find()
    .then(customers => {
        res.json(customers);
    }).catch(err => {
        res.status(500).send({
            msg: err.message
        });
    });
};


// FIND a Customer
exports.findOne = (req, res) => {
    Customer.findById(req.params.customerId)
    .then(customer => {
        if(!customer) {
            return res.status(404).json({
                msg: "Customer not found with id " + req.params.customerId
            });            
        }
        res.json(customer);
    }).catch(err => {
        if(err.kind === 'ObjectId') {
            return res.status(404).json({
                msg: "Customer not found with id " + req.params.customerId
            });                
        }
        return res.status(500).json({
            msg: "Error retrieving Customer with id " + req.params.customerId
        });
    });
};

// UPDATE a Customer
exports.update = (req, res) => {
    // Find customer and update it
    Customer.findByIdAndUpdate(req.body._id, req.body, {new: true})
    .then(customer => {
        if(!customer) {
            return res.status(404).json({
                msg: "Customer not found with id " + req.params.customerId
            });
        }
        res.json(customer);
    }).catch(err => {
        if(err.kind === 'ObjectId') {
            return res.status(404).json({
                msg: "Customer not found with id " + req.params.customerId
            });                
        }
        return res.status(500).json({
            msg: "Error updating customer with id " + req.params.customerId
        });
    });
};

// DELETE a Customer
exports.delete = (req, res) => {
    Customer.findByIdAndRemove(req.params.customerId)
    .then(customer => {
        if(!customer) {
            return res.status(404).json({
                msg: "Customer not found with id " + req.params.customerId
            });
        }
        res.json({msg: "Customer deleted successfully!"});
    }).catch(err => {
        if(err.kind === 'ObjectId' || err.name === 'NotFound') {
            return res.status(404).json({
                msg: "Customer not found with id " + req.params.customerId
            });                
        }
        return res.status(500).json({
            msg: "Could not delete customer with id " + req.params.customerId
        });
    });
};

Server.js

‘server.js’ ->


const express = require('express');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json())

// Configuring the database
const dbConfig = require('./app/config/mongodb.config.js');
const mongoose = require('mongoose');

const Customer = require('./app/models/customer.model.js');

mongoose.Promise = global.Promise;

// Connecting to the database
mongoose.connect(dbConfig.url)
.then(() => {
    console.log("Successfully connected to MongoDB.");    

    Customer.remove({}, function(err) { 

       if(err){
          console.log(err);
          process.exit();
       }
       
       console.log('Customer collection removed');
       // -> initial new data
       initial();
    });

}).catch(err => {
    console.log('Could not connect to MongoDB.');
    process.exit();
});

const cors = require('cors')
const corsOptions = {
  origin: 'http://localhost:4200',
  optionsSuccessStatus: 200
}
 
app.use(cors(corsOptions))

require('./app/routes/customer.routes.js')(app);

// Create a Server
const server = app.listen(8080, function () {

  let host = server.address().address
  let port = server.address().port

  console.log("App listening at http://%s:%s", host, port)
})

function initial(){
 
    let customers = [
      {
        firstname: "Joe",
        lastname: "Thomas",
        age: 36
      },
      {
        firstname: "Peter",
        lastname: "Smith",
        age: 18
      },
      {
        firstname: "Lauren",
        lastname: "Taylor",
        age: 31
      },
      {
        firstname: "Mary",
        lastname: "Taylor",
        age: 24
      },
      {
        firstname: "David",
        lastname: "Moore",
        age: 25
      },
      {
        firstname: "Holly",
        lastname: "Davies",
        age: 27
      },
      {
        firstname: "Michael",
        lastname: "Brown",
        age: 45
      }
    ]
   
    // Init data -> save to MongoDB

    for (let i = 0; i < customers.length; i++) { 
        const customer = new Customer(customers[i]);
        customer.save();
    }

    console.log(">>> Done - Initial Data!");
}

Angular 9 Client

Data Model

customer.ts ->


export class Customer {
    _id: string;
    firstname: string;
    lastname: string;
    age: number;
}

Configure AppModule

In the developed application, we use:

  • Angular Forms -> for building form
  • HttpClient -> for http Get/Post/Put/Delete requests
  • AppRouting -> for app routing

-> Modify AppModule app.module.ts:


import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
 
import { FormsModule }   from '@angular/forms';
import { HttpClientModule }    from '@angular/common/http';
 
import { AppRoutingModule }     from './app-routing/app-routing.module';
 
import { AppComponent } from './app.component';
import { CustomerComponent } from './customer/customer.component';
import { CustomerDetailsComponent } from './customer-details/customer-details.component';
import { AddCustomerComponent } from './add-customer/add-customer.component';
 
@NgModule({
  declarations: [
    AppComponent,
    CustomerComponent,
    CustomerDetailsComponent,
    AddCustomerComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    AppRoutingModule,
    HttpClientModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

HttpClient DataService

Implement CustomerService customer.service.ts with HttpClient for Get/Post/Put/Delete:


import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
import { Customer } from './customer';

const httpOptions = {
  headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};

@Injectable({
  providedIn: 'root'
})
export class CustomerService {
  private customersUrl = 'http://localhost:8080/api/customers';  // URL to web api
  constructor( 
    private http: HttpClient
  ) { }

  getCustomers (): Observable {
    return this.http.get(this.customersUrl)
  }

  getCustomer(id: string): Observable {
    const url = `${this.customersUrl}/${id}`;
    return this.http.get(url);
  }

  addCustomer (customer: Customer): Observable {
    return this.http.post(this.customersUrl, customer, httpOptions);
  }

  deleteCustomer (customer: Customer | string): Observable {
    const id = typeof customer === 'string' ? customer : customer._id;
    const url = `${this.customersUrl}/${id}`;

    return this.http.delete(url, httpOptions);
  }

  updateCustomer (customer: Customer): Observable {
    return this.http.put(this.customersUrl, customer, httpOptions);
  }
}

Angular Router

Implement App-Routing module app-routing.module.ts ->


import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CustomerComponent } from '../customer/customer.component';
import { AddCustomerComponent } from '../add-customer/add-customer.component';
import { CustomerDetailsComponent } from '../customer-details/customer-details.component';
 
const routes: Routes = [
   { 
     path: 'customers', 
     component: CustomerComponent 
   },
   { 
     path: 'customer/add', 
     component: AddCustomerComponent 
   },
   { 
     path: 'customers/:id', 
     component: CustomerDetailsComponent 
   },
   { 
     path: '', 
     redirectTo: 'customers', 
     pathMatch: 'full'
   }, 
];
 
@NgModule({
  imports: [ RouterModule.forRoot(routes) ],
  exports: [ RouterModule ]
})
 
export class AppRoutingModule {}
Router Outlet & Router Links

-> Questions:

  • How to show Componenets with Angular Routers? -> Solution: using Router Outlet
  • How to handle the routing that comes from user’s actions? (like clicks on anchor tag) -> Solution: using Router Link

-> We can achieve above functions by using Angular’s router-outlet and routerLink.

Modify the template file app.component.html of AppComponenet component as below:

<div class="container">
  <div class="row">
    <div class="col-sm-4">  
      <h1>Angular HttpClient</h1>
      <ul class="nav justify-content-center">
          <li class="nav-item">
              <a routerLink="customers" class="btn btn-light btn-sm" role="button" routerLinkActive="active">Retrieve</a> 
          </li>
          <li class="nav-item">
              <a routerLink="customer/add" class="btn btn-light btn-sm" role="button" routerLinkActive="active">Create</a>
          </li>
      </ul>
      <hr>
      <router-outlet></router-outlet>
    </div>
  </div>
</div>

Customer Component

Customer Component ->

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + retrieves-all-customers

– Implement CustomerComponent class customer.component.ts :


import { Component, OnInit } from '@angular/core';
import { Customer } from '../customer';
import { CustomerService } from '../customer.service';


@Component({
  selector: 'app-customer',
  templateUrl: './customer.component.html',
  styleUrls: ['./customer.component.css']
})

export class CustomerComponent  implements OnInit {

  customers: Customer[];

  constructor(private customerService: CustomerService) {}

  ngOnInit(): void {
     this.getCustomers();
  }

  getCustomers() {
    return this.customerService.getCustomers()
               .subscribe(
                 customers => {
                  console.log(customers);
                  this.customers = customers
                 }
                );
 }
}

– Implement the template customer.component.html :

<h3>All Customers</h3>
<div *ngFor="let cust of customers; let rowIndex=index">
  <a [routerLink]="['/customers', cust._id]" style="color:black"><span class="badge badge-dark">{{rowIndex + 1}}</span> -> {{cust.firstname}}</a>
</div>
Customer Detail Component

Customer Detail ->

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + update-customers

-> results:

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + update-results

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + delete-customers

– Implement CustomerDetails class customer-details.component.ts:


import { Component, OnInit } from '@angular/core';
import { Customer } from '../customer';
import { CustomerService } from '../customer.service';

import { ActivatedRoute, Params } from '@angular/router';
import { Location } from '@angular/common';

@Component({
  selector: 'app-customer-details',
  templateUrl: './customer-details.component.html',
  styleUrls: ['./customer-details.component.css']
})
export class CustomerDetailsComponent implements OnInit {

  customer = new Customer() ;
  submitted = false;
  message: string;

  constructor(
    private customerService: CustomerService,
    private route: ActivatedRoute,
    private location: Location
  ) {}

  ngOnInit(): void {
    const id = this.route.snapshot.paramMap.get('id');
    this.customerService.getCustomer(id)
      .subscribe(customer => this.customer = customer);
  }

  update(): void {
    this.submitted = true;
    this.customerService.updateCustomer(this.customer)
        .subscribe(result => this.message = "Customer Updated Successfully!");
  }

  delete(): void {
    this.submitted = true;
    this.customerService.deleteCustomer(this.customer._id)
        .subscribe(result => this.message = "Customer Deleted Successfully!");
  }

  goBack(): void {
    this.location.back();
  }
}

– Implement CustomerDetailsComponent template customer-details.component.html :

<h5><span class="badge badge-light ">{{customer._id}}</span> -> {{customer.firstname}}</h5>
<div [hidden]="submitted">
    <form #detailCustomerForm="ngForm">
      <div class="form-group">
        <label for="firstname">First Name</label>
        <input type="text" class="form-control" id="firstname" required
        [(ngModel)]="customer.firstname" name="firstname" #firstname="ngModel">
        <div [hidden]="firstname.valid || firstname.pristine"
             class="alert alert-danger">
            First Name is required
        </div>
      </div>
      
      <div class="form-group">
        <label for="lastname">Last Name</label>
        <input type="text" class="form-control" id="lastname" required
        [(ngModel)]="customer.lastname" name="lastname" #lastname="ngModel">
        <div [hidden]="lastname.valid || lastname.pristine"
             class="alert alert-danger">
            Last Name is required
        </div>
      </div>
      
      <div class="form-group">
        <label for="age">Age</label>
        <input type="number" class="form-control" id="age" required
        [(ngModel)]="customer.age" name="age" #age="ngModel">
        <div [hidden]="age.valid || age.pristine"
             class="alert alert-danger">
            Age is required
        </div>
      </div>

      <div class="btn-group btn-group-sm">
        <button type="button" class="btn btn-dark" (click)="goBack()">Back</button>
        <button type="button" class="btn btn-dark" (click)="update()" [disabled]="!detailCustomerForm.form.valid">Update</button>
        <button type="button" class="btn btn-dark" (click)="delete()">Delete</button>
	    </div>
    </form>
</div>
 
<div [hidden]="!submitted">
    <p>{{message}}</p>
    <div class="btn-group btn-group-sm">
      <button type="button" class="btn btn-dark" (click)="goBack()">Back</button>
    </div>
</div>

We can change the value of ng-valid & ng-invalid for more visual feedback,
-> Create ./assets/forms.css file:


.ng-valid[required], .ng-valid.required  {
    border-left: 5px solid rgba(32, 77, 32, 0.623);
}
 
.ng-invalid:not(form)  {
    border-left: 5px solid rgb(148, 27, 27);
}

Add ./assets/forms.css file to index.html :

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Angular6Httpclient</title>
  <base href="/">
 
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
  <link rel="stylesheet" href="assets/forms.css">
</head>
<body>
  <app-root></app-root>
</body>
</html>

Add-Customer Component

AddCustomer Component ->

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + add-customers

-> result:

angular-6-nodejs-rest-apis-crud-post-get-put-delete-mongodb-using-mongoose + add-customers-results

– Implement AddCustomerComponent class add-customer.component.ts:


import { Component, OnInit } from '@angular/core';
import { Customer } from '../customer';
import { CustomerService } from '../customer.service';

import { Location } from '@angular/common';

@Component({
  selector: 'app-add-customer',
  templateUrl: './add-customer.component.html',
  styleUrls: ['./add-customer.component.css']
})

export class AddCustomerComponent{

  customer = new Customer();
  submitted = false;

  constructor(
    private customerService: CustomerService,
    private location: Location
  ) { }

  newCustomer(): void {
    this.submitted = false;
    this.customer = new Customer();
  }

 addCustomer() {
   this.submitted = true;
   this.save();
 }

  goBack(): void {
    this.location.back();
  }

  private save(): void {
    console.log(this.customer);
    this.customerService.addCustomer(this.customer)
        .subscribe();
  }
}

– Implement the template add-customer.component.html:

<h3>Add Customer</h3>
<div [hidden]="submitted">
    <form #addCustomerForm="ngForm">

      <div class="form-group">
        <label for="firstname">First Name</label>
        <input type="text" class="form-control" id="firstname" placeholder="Give Customer's FirstName" 
        required
        [(ngModel)]="customer.firstname" name="firstname" #firstname="ngModel">
        <div [hidden]="firstname.valid || firstname.pristine"
             class="alert alert-danger">
            First Name is required
        </div>
      </div>
      
      <div class="form-group">
        <label for="lastname">Last Name</label>
        <input type="text" class="form-control" id="lastname" placeholder="Give Customer's LastName"
        required
        [(ngModel)]="customer.lastname" name="lastname" #lastname="ngModel">
        <div [hidden]="lastname.valid || lastname.pristine"
             class="alert alert-danger">
            Last Name is required
        </div>
      </div>
      
      <div class="form-group">
        <label for="age">Age</label>
        <input type="number" class="form-control" id="age" 
        placeholder="Give Customer's Age"
        required
        [(ngModel)]="customer.age" name="age" #age="ngModel">
        <div [hidden]="age.valid || age.pristine"
             class="alert alert-danger">
            Age is required
        </div>
      </div>
      
      <div class="btn-group btn-group-sm">
      	<button type="button" class="btn btn-dark" (click)="goBack()">Back</button>
      	<button type="button" class="btn btn-dark" (click)="addCustomer()" [disabled]="!addCustomerForm.form.valid">Add</button>
      </div>
    </form>
</div>

<div [hidden]="!submitted">
  <p>Submitted Successfully! -> <span class="badge badge-light">{{customer.firstname}}  {{customer.lastname}}</span></p>
	<div class="btn-group btn-group-sm">
    	<button type="button" class="btn btn-dark" (click)="goBack()">Back</button>
    	<button type="button" class="btn btn-dark" (click)="newCustomer(); addCustomerForm.reset()">Continue</button>
    </div>
</div>

SourceCode

Angular-6-Http-Client
Node.js-RestAPIs-Mongoose-MongDB

2,650 thoughts on “Angular 9 + Nodejs/Express + Mongoose CRUD MongoDB – Get/Post/Put/Delete”

  1. Hello! I could have sworn I’ve been to your blog before but
    after browsing through many of the posts I realized it’s new to
    me. Anyways, I’m certainly happy I stumbled upon it and I’ll be book-marking it and checking
    back frequently!

  2. I do not know whether it’s just me or if perhaps everyone else encountering problems with
    your blog. It appears as if some of the written text within your posts are running off the screen. Can someone
    else please provide feedback and let me know
    if this is happening to them too? This might be a problem with my browser because I’ve had this happen previously.
    Kudos

  3. eine kleine frage, ist wer dabei neue Taktikkarten mit veteran zu machen? Weil wollte in den nächsten Tagen die nordmänner spielen und würde gerne ne Takktik haben mit Veteran.

  4. Good day! This is my first visit to your blog!
    We are a group of volunteers and starting a new project in a community
    in the same niche. Your blog provided us beneficial information to work on.
    You have done a wonderful job!

  5. I used to be suggested this blog through my cousin. I amno longer certain whether this post is written by way of him as nobodyelse recognise such exact about my trouble. You’re wonderful!Thanks!

  6. Hi there! I just wanted to ask if you ever have any trouble with hackers?
    My last blog (wordpress) was hacked and I ended up losing months of hard
    work due to no back up. Do you have any solutions to stop hackers?

  7. Have you ever thought about publishing an e-book or guest authoring on other blogs?
    I have a blog based on the same topics you discuss and would
    really like to have you share some stories/information. I know my subscribers would enjoy your
    work. If you are even remotely interested, feel free to send me
    an email.

  8. Hey, I think your blog might be having browser compatibility issues.When I look at your blog in Safari, it looks fine but when opening in InternetExplorer, it has some overlapping. I just wanted to give you aquick heads up! Other then that, awesome blog!

  9. Hey I know this is off topic but I was wondering if you knew of any widgets I could add to my blog that automatically tweet my newest twitter updates.

    I’ve been looking for a plug-in like this for quite some time
    and was hoping maybe you would have some experience with something like this.
    Please let me know if you run into anything. I truly enjoy reading your blog and
    I look forward to your new updates.

  10. I will right away seize your rss as I can’t to find your e-mail subscription hyperlink or e-newsletter service.
    Do you’ve any? Kindly permit me recognize in order that I may subscribe.
    Thanks.

  11. Attractive part of content. I simply stumbled upon your web site and in accession capital to say that
    I acquire actually enjoyed account your weblog posts.
    Anyway I’ll be subscribing in your augment or even I achievement you
    access consistently quickly.

  12. You actually make it seem so easy together with your presentation however I find this matter to be actually something which I believe I would never understand.
    It seems too complicated and very wide for me.

    I am looking ahead on your subsequent publish, I’ll try to get the grasp of it!

  13. Excellent post however I was wondering if you could write a litte more on this topic?I’d be very thankful if you could elaborate a little bit further.Appreciate it!

  14. I am not sure where you’re getting your information, but great topic.
    I needs to spend some time learning more or understanding more.
    Thanks for fantastic information I was looking for this info
    for my mission.

  15. Magnificent goods from you, man. I have understand your stuff prior to and you’re just
    extremely great. I really like what you have obtained here, really like what you are
    stating and the way by which you say it. You make it enjoyable
    and you continue to take care of to stay it wise. I can’t wait to learn far more from you.
    This is really a tremendous web site.

  16. Hello! This post could not be written any better!
    Reading this post reminds me of my previous room mate!
    He always kept talking about this. I will forward this post to him.
    Pretty sure he will have a good read. Many thanks for sharing!

  17. Aw, this was a really good post. Taking the time and actual effort to produce a really
    good article… but what can I say… I procrastinate a
    lot and don’t seem to get nearly anything done.

  18. I’m amazed, I have to admit. Rarely do I encounter a blog that’s equally educative and interesting, and without a doubt, you have hit
    the nail on the head. The problem is something too few men and women are
    speaking intelligently about. I’m very happy that I
    stumbled across this in my search for something
    concerning this.

  19. Someone necessarily assist to make significantly articles I’d state. That is the very first time I frequented your web page and so far? I surprised with the analysis you made to create this particular post incredible. Fantastic job!

  20. I used to be suggested this web site via my cousin. I am no longer sure whether this put up is written by
    means of him as no one else realize such distinctive approximately my problem.

    You’re wonderful! Thank you!

  21. Thanks, I have just been searching for info about this topic for a long time and yours is the greatest I have came upon till now. But, what in regards to the bottom line? Are you certain about the supply?

  22. Hi there! I know this is sort of off-topic but I had to ask. Does running a well-established blog such as yours take a lot of work? I am brand new to blogging however I do write in my diary on a daily basis. I’d like to start a blog so I can easily share my personal experience and views online. Please let me know if you have any kind of recommendations or tips for brand new aspiring bloggers. Appreciate it!

  23. After I initially commented I appear to have clicked on the -Notify me when new comments
    are added- checkbox and now each time a comment is added I get four emails with the exact same comment.
    Perhaps there is an easy method you can remove me
    from that service? Kudos!

  24. Hmm is anyone else experiencing problems with the pictures on this blog loading? I’m trying to find out if its a problem on my end or if it’s the blog. Any feed-back would be greatly appreciated.

  25. Pretty section of content. I just stumbled upon your blog and
    in accession capital to assert that I acquire in fact enjoyed account your blog
    posts. Anyway I will be subscribing to your augment and even I achievement you access consistently fast.

  26. Thanks for any other informative site. Where else may I get that kind of information written in such a perfect approach?
    I’ve a venture that I’m just now running on, and I’ve been at the glance out
    for such info.

  27. Please let me know if you’re looking for a article writer for your site.
    You have some really great posts and I think I would be a good asset.
    If you ever want to take some of the load off, I’d
    love to write some articles for your blog in exchange for a link back to mine.
    Please shoot me an email if interested. Kudos!

  28. I was pretty pleased to discover this web site. I wanted to thank
    you for your time due to this fantastic read!!

    I definitely really liked every bit of it and I have you saved as a favorite to see new things in your web site.

  29. I like the helpful information you provide in your articles.
    I’ll bookmark your weblog and check again here regularly.
    I am quite sure I will learn plenty of new stuff right here!
    Best of luck for the next!

  30. Howdy just wanted to give you a quick heads up. The text in your article seem to be running off
    the screen in Internet explorer. I’m not sure if this is a formatting
    issue or something to do with web browser
    compatibility but I thought I’d post to let you know.
    The design look great though! Hope you get the problem resolved soon. Cheers

  31. Hey I know this is off topic but I was wondering if you knew of
    any widgets I could add to my blog that automatically tweet my newest twitter updates.

    I’ve been looking for a plug-in like this for quite some time and was hoping maybe
    you would have some experience with something like this. Please let me know if you run into anything.
    I truly enjoy reading your blog and I look forward
    to your new updates.

  32. You actually make it seem so easy with your presentation but
    I find this topic to be actually something that I think I would never
    understand. It seems too complex and extremely broad for me.

    I’m looking forward for your next post, I’ll try to get the hang of it!

  33. Hi! I know this is kinda off topic however I’d figured I’d ask.
    Would you be interested in trading links or maybe guest authoring a blog article or vice-versa?
    My blog discusses a lot of the same subjects as yours and I believe we
    could greatly benefit from each other. If you happen to be interested feel free to shoot me an e-mail.
    I look forward to hearing from you! Wonderful blog by the way!

  34. Thanks for any other informative site. The place else may I am getting that type of info
    written in such an ideal manner? I’ve a project that I’m
    just now operating on, and I have been on the look
    out for such info.

  35. This is really interesting, You’re a very skilled blogger.
    I have joined your rss feed and look forward
    to seeking more of your great post. Also, I have shared your site in my social networks!

  36. Do you have a spam problem on this site; I also am a blogger, and I was curious about your
    situation; we have developed some nice methods and we
    are looking to exchange solutions with others, why not shoot me an email if
    interested.

  37. I am extremely impressed along with your writing skills as smartly as with the structure
    for your weblog. Is this a paid subject matter or did you customize it
    your self? Anyway keep up the excellent high quality writing, it’s uncommon to see a nice blog like this one today..

  38. I like the valuable information you provide in your articles.

    I will bookmark your blog and check again here regularly.
    I’m quite sure I will learn plenty of new stuff
    right here! Best of luck for the next!

  39. After going over a number of the articles on your site, I honestly appreciate your way of blogging.
    I added it to my bookmark webpage list and will be checking back soon. Take a look at my website
    as well and let me know what you think.

  40. I’m curious to find out what blog platform you are utilizing?
    I’m having some small security issues with my latest blog and I’d like to find
    something more risk-free. Do you have any recommendations?

  41. Hi! I realize this is somewhat off-topic however
    I needed to ask. Does running a well-established blog such as yours require a large amount
    of work? I am completely new to blogging but I
    do write in my diary everyday. I’d like to start a blog so I can easily share my experience and feelings online.
    Please let me know if you have any kind of suggestions or tips for new aspiring bloggers.
    Appreciate it!

  42. Great post. I was checking constantly this blog and I’m impressed!

    Very helpful info specially the last part 🙂 I care for
    such info much. I was seeking this certain info for a long time.
    Thank you and best of luck.

  43. Good day! This post could not be written any better!
    Reading through this post reminds me of my good old room mate!
    He always kept chatting about this. I will forward this post to
    him. Pretty sure he will have a good read.
    Many thanks for sharing!

  44. Do you have a spam issue on this website; I also am a blogger, and
    I was curious about your situation; we have developed
    some nice procedures and we are looking to exchange solutions with others,
    why not shoot me an email if interested.

  45. Hey I know this is off topic but I was wondering if you knew of any widgets I could add to my blog that automatically tweet
    my newest twitter updates. I’ve been looking for a plug-in like
    this for quite some time and was hoping maybe you would have some experience with
    something like this. Please let me know if you run into
    anything. I truly enjoy reading your blog and I look forward to your new updates.

  46. Excellent blog! Do you have any tips for aspiring writers?

    I’m planning to start my own blog soon but I’m a little lost on everything.
    Would you advise starting with a free platform like WordPress or go for a
    paid option? There are so many choices out there that I’m completely confused ..
    Any ideas? Kudos!

  47. Greate post. Keep writing such kind of information on your page.
    Im really impressed by your site.
    Hey there, You’ve performed a fantastic job.
    I’ll definitely digg it and for my part suggest to my friends.
    I am sure they’ll be benefited from this
    web site.

  48. Pretty nice post. I just stumbled upon your weblog and
    wanted to say that I’ve really enjoyed surfing around your weblog posts.
    After all I’ll be subscribing for your feed and I am hoping you write once more soon!

  49. I would like to convey my admiration for your generosity in support of men and women that have the need for help with this particular concern. Your special dedication to getting the message all over had been wonderfully productive and have all the time made professionals much like me to attain their dreams. Your own invaluable tutorial means a great deal to me and additionally to my office workers. Thank you; from everyone of us.

  50. I think this is among the most significant info for me. And i am glad reading your article.
    But wanna remark on few general things, The site style is great, the articles is really nice : D.
    Good job, cheers

  51. Hello! I’ve been reading your website for a long time now and finally
    got the bravery to go ahead and give you a shout out from
    New Caney Texas! Just wanted to say keep up the great work!

  52. I have been surfing online more than 3 hours these days, yet
    I by no means discovered any interesting article like yours.
    It is pretty worth enough for me. In my view,
    if all site owners and bloggers made good content
    material as you did, the web shall be much more useful than ever before.

  53. My partner and I stumbled over here from a different web page and
    thought I should check things out. I like what I see so i am
    just following you. Look forward to finding
    out about your web page again.

  54. First off I would like to say wonderful blog! I had a quick question that I’d like to
    ask if you do not mind. I was curious to find out how you
    center yourself and clear your head prior to writing. I have
    had a tough time clearing my thoughts in getting my thoughts out there.
    I truly do take pleasure in writing however it just seems like the first 10 to 15 minutes tend to be wasted just trying to figure out how to begin. Any ideas or tips?
    Kudos!

  55. hi!,I love your writing so a lot! proportion we keep in touch
    more approximately your article on AOL? I need an expert in this area to resolve my
    problem. May be that is you! Taking a look forward to see you.

  56. I’m not that much of a internet reader to be honest but your sites really nice, keep it up!
    I’ll go ahead and bookmark your website to come back down the road.
    All the best

  57. You actually make it seem so easy with your presentation but I find this matter to be actually something that I think I would never understand.
    It seems too complicated and extremely broad for me.
    I am looking forward for your next post, I’ll try to get the hang of it!

  58. Just desire to say your article is as astonishing.
    The clearness to your post is simply cool and i can suppose you’re knowledgeable in this subject.
    Well together with your permission allow me to clutch your feed to stay updated with impending post.

    Thank you a million and please carry on the enjoyable work.

  59. I loved as much as you will receive carried out right here.
    The sketch is attractive, your authored subject matter
    stylish. nonetheless, you command get got an nervousness
    over that you wish be delivering the following. unwell unquestionably come more
    formerly again as exactly the same nearly a lot often inside case you shield this increase.

  60. of course like your web site but you need to take a look
    at the spelling on quite a few of your posts.
    Many of them are rife with spelling issues and
    I find it very troublesome to inform the truth however I’ll surely
    come back again.

  61. I do not know whether it’s just me or if perhaps everybody else experiencing issues with your site.
    It looks like some of the written text within your posts are running
    off the screen. Can somebody else please comment and let me know if this is happening to them as well?

    This might be a issue with my web browser because I’ve had this happen previously.

    Thank you

  62. Great blog here! Also your web site loads up very fast!
    What host are you using? Can I get your affiliate link to your host?
    I wish my website loaded up as fast as yours lol

  63. Unquestionably believe that which you said. Your favourite
    justification seemed to be at the internet the simplest thing to consider of.
    I say to you, I certainly get annoyed at the same time as other folks
    consider issues that they just don’t recognise about.

    You managed to hit the nail upon the highest as well as outlined out
    the entire thing without having side effect , folks could take
    a signal. Will likely be again to get more. Thanks

  64. obviously like your website however you have to check the spelling on quite a few of your posts.
    Several of them are rife with spelling problems and I in finding it very
    troublesome to tell the truth however I will definitely come again again.

  65. Hi there I am so excited I found your webpage, I really found you by error, while I was searching on Bing
    for something else, Anyhow I am here now and would just like
    to say thanks for a incredible post and a all round interesting blog (I also
    love the theme/design), I don’t have time to read
    it all at the minute but I have saved it and also included your RSS feeds, so when I have time I will be back
    to read a lot more, Please do keep up the great jo.

  66. I’ve been exploring for a bit for any high quality articles or blog
    posts on this kind of area . Exploring in Yahoo I
    ultimately stumbled upon this web site. Reading this information So i’m
    satisfied to express that I have a very just right uncanny feeling I found out just what I needed.
    I most unquestionably will make sure to do not forget this website
    and provides it a look regularly.

  67. I’m curious to find out what blog platform you have been using?
    I’m having some small security issues with my latest site and I’d
    like to find something more secure. Do you have any solutions?

  68. I loved as much as you will receive carried out right here.
    The sketch is tasteful, your authored subject matter stylish.
    nonetheless, you command get bought an impatience
    over that you wish be delivering the following. unwell unquestionably come more formerly again as exactly the same nearly very often inside case you shield this increase.

  69. I don’t know whether it’s just me or if everyone else encountering issues with your
    blog. It appears like some of the written text in your
    posts are running off the screen. Can someone else please
    provide feedback and let me know if this is happening to them
    as well? This may be a problem with my web browser because I’ve had this
    happen before. Appreciate it

  70. Greetings, There’s no doubt that your web site could be having
    web browser compatibility problems. When I take a look at your
    website in Safari, it looks fine however, when opening
    in I.E., it has some overlapping issues. I just wanted to
    give you a quick heads up! Other than that, excellent website!

  71. Howdy! I know this is kinda off topic however I’d figured I’d ask.
    Would you be interested in trading links or maybe guest authoring a blog post or vice-versa?

    My blog covers a lot of the same topics as yours and I feel we could greatly benefit from each other.
    If you happen to be interested feel free to send me an email.
    I look forward to hearing from you! Great blog by the way!

  72. Hello, i think that i saw you visited my web site so i
    came to “return the favor”.I’m trying to find things to improve my web site!I suppose its ok to use some of your ideas!!

  73. I loved as much as you’ll receive carried out right
    here. The sketch is attractive, your authored material stylish.

    nonetheless, you command get bought an shakiness over that
    you wish be delivering the following. unwell unquestionably come further formerly again as exactly the same nearly very often inside case you shield this increase.

  74. A person essentially lend a hand to make severely posts
    I might state. That is the first time I frequented your website page and to this point?
    I amazed with the analysis you made to create this particular publish amazing.
    Excellent task!

  75. I will immediately seize your rss feed as I can’t find your e-mail subscription link or newsletter service.

    Do you’ve any? Please let me know so that I could
    subscribe. Thanks.

  76. Thanks for ones marvelous posting! I really enjoyed reading it, you could be
    a great author. I will ensure that I bookmark your blog and will often come back someday.
    I want to encourage that you continue your
    great job, have a nice morning!

  77. Its like you read my mind! You seem to know so much approximately this, such as you
    wrote the ebook in it or something. I believe that you simply
    could do with a few % to drive the message home a bit, however other than that, that is magnificent blog.
    An excellent read. I’ll definitely be back.

  78. I’m really impressed with your writing skills as smartly as with the structure on your
    blog. Is this a paid topic or did you customize it yourself?
    Either way keep up the nice high quality writing,
    it’s uncommon to see a great blog like this one these days..

  79. Hi! Do you know if they make any plugins to assist with Search Engine Optimization?
    I’m trying to get my blog to rank for some targeted keywords but I’m not seeing very good success.
    If you know of any please share. Kudos!

  80. Attractive section of content. I just stumbled
    upon your site and in accession capital to assert that
    I acquire in fact enjoyed account your blog posts. Any way I will
    be subscribing to your feeds and even I achievement you access consistently rapidly.

  81. Great post. I used to be checking constantly this blog and I am inspired!

    Extremely useful info specifically the ultimate part 🙂 I
    maintain such info much. I was seeking this particular info for a very long time.
    Thank you and good luck.

  82. Definitely imagine that which you said. Your favorite justification appeared to
    be on the internet the simplest factor to take note of.
    I say to you, I certainly get annoyed whilst other folks think
    about worries that they plainly do not know about.
    You managed to hit the nail upon the top as well as outlined out the whole thing with no need side effect , other people can take a signal.
    Will probably be again to get more. Thanks

  83. Excellent article. Keep writing such kind of
    information on your page. Im really impressed by your site.

    Hello there, You have performed an excellent job.
    I will definitely digg it and individually recommend to my friends.
    I am confident they will be benefited from
    this website.

  84. Hey, I think your site might be having browser compatibility issues.
    When I look at your blog in Ie, it looks fine but when opening in Internet
    Explorer, it has some overlapping. I just wanted to give you
    a quick heads up! Other then that, wonderful blog!

  85. Please let me know if you’re looking for a article writer for
    your weblog. You have some really great articles and I feel I would be a good asset.
    If you ever want to take some of the load off, I’d love to write some articles for your blog in exchange for a link back to
    mine. Please send me an email if interested. Thanks!

  86. Fantastic site you have here but I was curious if
    you knew of any discussion boards that cover the same topics talked about in this
    article? I’d really love to be a part of community where I can get feedback from
    other knowledgeable individuals that share the same interest.
    If you have any suggestions, please let me know.

    Appreciate it!

  87. Hello I am so delighted I found your blog, I really found you by accident, while I was researching on Aol for something else, Regardless I
    am here now and would just like to say many thanks
    for a incredible post and a all round entertaining blog (I also love the theme/design), I don’t have time
    to read through it all at the moment but I have book-marked it and also added
    your RSS feeds, so when I have time I will be back to read a great deal more, Please do keep
    up the superb work.

  88. It’s a pity you don’t have a donate button! I’d certainly donate to this brilliant blog!
    I suppose for now i’ll settle for bookmarking and adding your RSS
    feed to my Google account. I look forward to brand new updates and will share this website with my Facebook group.
    Chat soon!

  89. Whats up this is kinda of off topic but I was wondering if blogs use WYSIWYG editors or if you have to manually code with
    HTML. I’m starting a blog soon but have no coding experience so I wanted to get advice from someone with experience.
    Any help would be enormously appreciated!

  90. You actually make it seem so easy with your presentation but I find
    this matter to be really something which I think I
    would never understand. It seems too complicated and extremely broad for me.
    I’m looking forward for your next post, I will
    try to get the hang of it!

  91. It’s a pity you don’t have a donate button! I’d without a doubt donate to this superb
    blog! I guess for now i’ll settle for bookmarking and adding
    your RSS feed to my Google account. I look forward to brand new updates and will talk about this blog with my Facebook group.
    Talk soon!

  92. Your style is really unique in comparison to other folks I’ve
    read stuff from. Many thanks for posting when you’ve got the opportunity, Guess I’ll
    just book mark this page.

  93. You actually make it seem so easy with your presentation but I find this topic to be actually something that I think I would
    never understand. It seems too complex and extremely broad for me.
    I’m looking forward for your next post, I will try to get the
    hang of it!

  94. Pretty nice post. I just stumbled upon your weblog and wanted to say that I’ve truly enjoyed surfing around your
    blog posts. In any case I will be subscribing to your rss feed and I
    hope you write again very soon!

  95. Howdy! I understand this is somewhat off-topic but I needed to ask.
    Does running a well-established website like yours take
    a massive amount work? I’m brand new to writing a blog but
    I do write in my journal on a daily basis. I’d like to start a blog so I can share my
    own experience and feelings online. Please let me know
    if you have any kind of ideas or tips for brand new aspiring bloggers.
    Thankyou!

  96. Hello! I could have sworn I’ve visited this website before but
    after going through some of the articles I realized it’s new to me.
    Nonetheless, I’m certainly happy I stumbled upon it and I’ll be bookmarking
    it and checking back frequently!

  97. We’re a group of volunteers and starting a new scheme in our
    community. Your website offered us with valuable info to work on. You
    have done a formidable job and our whole community will be thankful
    to you.

  98. Great blog here! Additionally your web site
    rather a lot up fast! What web host are you the use of?
    Can I get your associate hyperlink in your host? I wish my site loaded
    up as quickly as yours lol

  99. I’ve been exploring for a little for any high-quality articles or
    blog posts on this kind of space . Exploring in Yahoo I
    ultimately stumbled upon this site. Studying
    this information So i am satisfied to exhibit that I have an incredibly excellent uncanny feeling I found out exactly
    what I needed. I so much undoubtedly will make sure to do not put out of your mind this web site and
    give it a look regularly.

  100. you’re in reality a good webmaster. The website loading speed is amazing.
    It kind of feels that you are doing any unique trick.
    Also, The contents are masterwork. you’ve done a great process on this topic!

  101. Hey there would you mind sharing which blog platform you’re working with?
    I’m going to start my own blog in the near future but I’m having a hard
    time deciding between BlogEngine/Wordpress/B2evolution and Drupal.
    The reason I ask is because your layout seems different then most blogs and I’m
    looking for something completely unique. P.S Sorry for being off-topic but I had to
    ask!

  102. Thank you a lot for sharing this with all of us you really realize
    what you’re speaking approximately! Bookmarked.

    Please additionally seek advice from my web site =).

    We could have a link exchange agreement among
    us

  103. Hi, i read your blog from time to time and i own a similar one
    and i was just wondering if you get a lot of spam comments?
    If so how do you prevent it, any plugin or anything you can advise?
    I get so much lately it’s driving me mad so any assistance is very much appreciated.

  104. Hey I know this is off topic but I was wondering if you knew of
    any widgets I could add to my blog that automatically tweet
    my newest twitter updates. I’ve been looking
    for a plug-in like this for quite some time and was hoping maybe
    you would have some experience with something like this. Please let me know if you run into anything.

    I truly enjoy reading your blog and I look forward to your new updates.

  105. Having read this I believed it was rather informative.
    I appreciate you finding the time and energy
    to put this information together. I once again find myself personally spending
    way too much time both reading and leaving comments. But so what,
    it was still worth it!

  106. This is the right website for anybody who wishes
    to understand this topic. You know so much its almost hard to argue with
    you (not that I really would want to…HaHa).
    You definitely put a brand new spin on a topic which has been written about for decades.
    Excellent stuff, just wonderful!

  107. Pretty element of content. I simply stumbled upon your site and
    in accession capital to claim that I get actually loved
    account your weblog posts. Anyway I will be subscribing on your feeds or even I fulfillment you access constantly fast.

  108. Hello just wanted to give you a quick heads up. The words in your content seem to be running off the screen in Ie.
    I’m not sure if this is a format issue or something to do
    with browser compatibility but I figured I’d post to let you know.
    The design and style look great though! Hope you get the problem fixed soon.
    Thanks

  109. Attractive section of content. I just stumbled upon your
    website and in accession capital to assert that I acquire in fact enjoyed account your blog posts.

    Anyway I’ll be subscribing to your feeds and even I achievement you access consistently quickly.

  110. Hi there! I could have sworn I’ve been to this website before
    but after checking through some of the post I
    realized it’s new to me. Anyways, I’m definitely delighted
    I found it and I’ll be bookmarking and checking back frequently!

  111. Excellent post. I was checking continuously this blog and I am
    impressed! Extremely helpful info particularly the last part :
    ) I care for such information much. I was seeking
    this certain information for a very long time. Thank you
    and best of luck.

  112. I will right away snatch your rss as I can’t to find your e-mail subscription link or newsletter
    service. Do you have any? Please permit me recognise in order that I may just subscribe.
    Thanks.

  113. My developer is trying to persuade me to move to .net from PHP.
    I have always disliked the idea because of the
    expenses. But he’s tryiong none the less. I’ve been using WordPress
    on numerous websites for about a year and am concerned about switching to
    another platform. I have heard great things
    about blogengine.net. Is there a way I can import all my wordpress posts into it?
    Any kind of help would be greatly appreciated!

  114. Hello there, I do think your web site may be having internet browser
    compatibility issues. When I take a look at your site in Safari, it looks fine however, when opening in IE, it has some
    overlapping issues. I simply wanted to give
    you a quick heads up! Aside from that, great website!

  115. Undeniably consider that which you stated.

    Your favourite reason seemed to be at the web the easiest
    factor to take into accout of. I say to you,
    I certainly get annoyed whilst other folks consider concerns that they just
    do not recognise about. You managed to hit the nail upon the top as smartly as
    outlined out the whole thing without having side effect
    , other people could take a signal. Will probably
    be back to get more. Thanks

  116. Great work! This is the kind of information that should be shared
    across the net. Disgrace on the search engines for now not positioning this publish higher!

    Come on over and talk over with my site . Thanks =)

  117. Howdy just wanted to give you a quick heads up.
    The words in your article seem to be running off the screen in Firefox.
    I’m not sure if this is a format issue or something to do with
    web browser compatibility but I figured I’d post to let you know.

    The layout look great though! Hope you get the issue resolved soon. Many thanks

  118. After looking over a few of the blog posts on your web site, I seriously appreciate your way of writing a blog.
    I saved as a favorite it to my bookmark webpage list and will be checking back in the
    near future. Please check out my website
    too and tell me how you feel.

  119. First of all I want to say wonderful blog!
    I had a quick question in which I’d like to ask if you don’t mind.
    I was curious to know how you center yourself and clear your mind prior
    to writing. I have had a difficult time clearing my mind in getting my ideas out there.
    I truly do take pleasure in writing however it just seems like
    the first 10 to 15 minutes tend to be wasted simply
    just trying to figure out how to begin. Any suggestions or hints?
    Kudos!

  120. Hey there just wanted to give you a quick heads up. The words in your content seem to be running off
    the screen in Ie. I’m not sure if this is a format issue or something to
    do with web browser compatibility but I thought I’d post
    to let you know. The style and design look great though!

    Hope you get the issue resolved soon. Cheers

  121. Hello, i think that i saw you visited my site thus i got here to go back the
    favor?.I am trying to to find things to enhance my website!I suppose its adequate to
    use a few of your ideas!!

  122. Hello, I believe your site might be having internet browser compatibility issues.

    When I take a look at your website in Safari, it looks fine however,
    if opening in IE, it’s got some overlapping issues.
    I just wanted to give you a quick heads up! Other than that, great blog!

  123. This design is steller! You obviously know how to keep a
    reader amused. Between your wit and your videos, I was almost moved to start
    my own blog (well, almost…HaHa!) Excellent job.
    I really enjoyed what you had to say, and more than that,
    how you presented it. Too cool!

  124. Hey there, I think your site might be having browser compatibility issues.
    When I look at your website in Safari, it looks fine but when opening in Internet Explorer, it has some
    overlapping. I just wanted to give you a quick heads
    up! Other then that, amazing blog!

  125. Hello there I am so thrilled I found your weblog, I really found you by mistake, while I was
    searching on Askjeeve for something else, Regardless I am here now and would just like to say thank you for a tremendous post and a all round thrilling blog (I also love the theme/design), I don’t have time
    to read it all at the moment but I have saved it and also included your RSS
    feeds, so when I have time I will be back to read much
    more, Please do keep up the great work.

  126. Hmm is anyone else having problems with the images on this
    blog loading? I’m trying to find out if its a problem
    on my end or if it’s the blog. Any suggestions would be greatly appreciated.

  127. You could definitely see your expertise in the work you write.
    The sector hopes for even more passionate writers such as you who
    aren’t afraid to mention how they believe.
    All the time follow your heart.

  128. Heya are using WordPress for your site platform? I’m new to the blog
    world but I’m trying to get started and set up my own. Do you require
    any coding knowledge to make your own blog? Any help would be really appreciated!

  129. Hello! I know this is kinda off topic however , I’d figured I’d ask.
    Would you be interested in trading links or maybe
    guest writing a blog article or vice-versa? My blog goes over a lot of the same
    topics as yours and I think we could greatly benefit from each other.

    If you’re interested feel free to send me an email. I
    look forward to hearing from you! Fantastic blog by the way!

  130. I am really inspired with your writing talents and also with the format to your blog.
    Is that this a paid subject or did you customize it yourself?

    Either way keep up the excellent high quality writing,
    it is uncommon to peer a great blog like this one
    nowadays..

  131. Hey There. I discovered your weblog using
    msn. That is a really well written article. I’ll make sure to bookmark
    it and come back to read extra of your helpful info. Thank you for the post.

    I will certainly comeback.

  132. A fascinating discussion is worth comment.
    I do believe that you need to write more on this topic,
    it might not be a taboo subject but usually folks don’t discuss these topics.
    To the next! All the best!!

  133. I think that is one of the such a lot significant info for me.
    And i’m satisfied studying your article. However want to commentary on few general things, The
    website taste is ideal, the articles is in reality great :
    D. Just right process, cheers

  134. What i don’t understood is in fact how you’re now not actually a lot
    more well-appreciated than you may be now. You’re so intelligent.

    You understand thus significantly when it comes to this topic, made me for my
    part imagine it from numerous varied angles.

    Its like women and men aren’t involved except it
    is something to accomplish with Woman gaga! Your individual stuffs outstanding.
    At all times handle it up!

  135. I’m curious to find out what blog system you are working
    with? I’m experiencing some small security issues with my latest website and I
    would like to find something more safeguarded.
    Do you have any recommendations?

  136. With havin so much content and articles do
    you ever run into any issues of plagorism or copyright
    infringement? My blog has a lot of unique content I’ve either created myself or outsourced
    but it appears a lot of it is popping it up all over the internet without my authorization. Do you know any techniques to help stop content from being ripped off?
    I’d certainly appreciate it.

  137. I’m now not certain the place you’re getting your info, but great topic.
    I must spend some time finding out much more or figuring out more.
    Thanks for magnificent information I was in search of this info for my mission.

  138. Hi! I’ve been following your site for a while now and finally got
    the bravery to go ahead and give you a shout out from New Caney Texas!
    Just wanted to mention keep up the fantastic work!

  139. I think that is one of the so much vital information for
    me. And i’m happy reading your article. However wanna observation on few basic things,
    The web site style is perfect, the articles is truly great : D.
    Just right process, cheers

  140. Definitely believe that which you stated. Your favorite justification seemed to
    be on the internet the simplest thing to be aware of. I say to you, I definitely get irked while people think about worries
    that they plainly do not know about. You managed to hit the nail upon the top and defined
    out the whole thing without having side-effects , people could
    take a signal. Will probably be back to get more.

    Thanks

  141. I loved as much as you will receive carried out right here.

    The sketch is tasteful, your authored material stylish.

    nonetheless, you command get bought an edginess over that you wish be delivering the
    following. unwell unquestionably come further formerly again since exactly the same nearly very often inside case you shield this increase.

  142. Definitely imagine that which you stated. Your favorite justification seemed to be at
    the internet the easiest factor to be aware of. I say to you,
    I certainly get irked at the same time as other people
    consider concerns that they just do not recognize about.
    You managed to hit the nail upon the top and also defined
    out the entire thing with no need side-effects , folks can take a signal.

    Will likely be back to get more. Thanks

  143. Do you have a spam issue on this website; I also am a blogger, and I was curious about your situation; many of us have created some nice procedures
    and we are looking to exchange strategies with other folks, be sure to shoot me an e-mail if interested.

  144. Hey there would you mind letting me know which hosting company you’re working with?

    I’ve loaded your blog in 3 different web browsers and I must say
    this blog loads a lot faster then most. Can you recommend a
    good web hosting provider at a honest price? Thanks a lot, I
    appreciate it!

  145. Good day! I could have sworn I’ve been to this website before but after looking at some of the
    posts I realized it’s new to me. Anyhow, I’m definitely delighted I stumbled upon it and
    I’ll be book-marking it and checking back regularly!

  146. Hello! I know this is kinda off topic but I’d figured I’d ask.
    Would you be interested in trading links or maybe guest authoring a blog post or vice-versa?
    My site covers a lot of the same subjects as yours and I think we
    could greatly benefit from each other. If you might be interested feel free to shoot me an e-mail.
    I look forward to hearing from you! Superb blog by the way!

  147. Hey there this is kinda of off topic but I was wanting to know if blogs use WYSIWYG editors or if you have to manually code with HTML.
    I’m starting a blog soon but have no coding expertise so I wanted to get advice from
    someone with experience. Any help would be enormously appreciated!

  148. A person essentially lend a hand to make significantly posts
    I’d state. This is the very first time I frequented your website page and thus far?
    I surprised with the analysis you made to create this actual publish
    incredible. Excellent job!

  149. When I initially commented I clicked the “Notify me when new comments are added” checkbox and now each time a comment is
    added I get three e-mails with the same comment.
    Is there any way you can remove me from that service?
    Thanks!

  150. Cool blog! Is your theme custom made or did you download it from somewhere?
    A design like yours with a few simple tweeks would really make my blog jump out.
    Please let me know where you got your design. Many thanks

  151. Wow that was unusual. I just wrote an incredibly long comment but
    after I clicked submit my comment didn’t show up. Grrrr…

    well I’m not writing all that over again. Anyhow, just wanted to say superb blog!

  152. I’m really impressed with your writing skills and also with the
    layout on your blog. Is this a paid theme or did you modify it
    yourself? Anyway keep up the nice quality writing, it is rare to see a great blog
    like this one nowadays.

  153. I believe that is among the such a lot important info for me.
    And i am satisfied studying your article. However want to statement on some basic things, The web
    site taste is ideal, the articles is in point of fact great : D.
    Excellent task, cheers

  154. Thanks for some other fantastic post. Where else could anybody get that kind of info in such a perfect
    manner of writing? I have a presentation subsequent week, and I’m at the search for such information.

  155. I got this web page from my friend who shared with me regarding this web page and now
    this time I am visiting this site and reading very informative content at this time.

  156. I do believe all the ideas you’ve presented for your post.
    They’re very convincing and can definitely work.
    Still, the posts are too quick for novices. May
    just you please extend them a bit from next time?
    Thanks for the post.

  157. I am really impressed with your writing skills as well as
    with the layout on your weblog. Is this a paid theme or did you modify it
    yourself? Either way keep up the excellent quality writing,
    it’s rare to see a great blog like this one these days.

  158. I’m not sure where you are getting your information, but good topic.
    I needs to spend some time learning much more or understanding
    more. Thanks for excellent information I was looking for this information for my mission.

  159. Whats up very cool web site!! Man .. Excellent ..

    Amazing .. I will bookmark your site and take the feeds also?
    I’m happy to find so many useful info here within the submit,
    we want work out more techniques in this regard, thank you for sharing.
    . . . . .

  160. It’s really a great and helpful piece of information. I am
    satisfied that you just shared this useful info with us.
    Please stay us up to date like this. Thanks
    for sharing.

  161. Excellent beat ! I wish to apprentice while you
    amend your site, how could i subscribe for a blog site?
    The account aided me a acceptable deal. I had been tiny bit acquainted
    of this your broadcast provided bright clear idea

  162. An intriguing discussion is definitely worth comment.
    I do believe that you need to write more on this topic, it
    might not be a taboo subject but usually people don’t discuss
    such topics. To the next! All the best!!

  163. I’m amazed, I have to admit. Rarely do I come across a blog that’s equally educative and amusing,
    and without a doubt, you have hit the nail on the head.
    The problem is an issue that too few people
    are speaking intelligently about. I’m very happy that I found
    this during my hunt for something concerning this.

  164. Hello there, I do believe your site could be having browser compatibility issues.
    Whenever I look at your blog in Safari, it looks fine however, if opening in I.E.,
    it has some overlapping issues. I simply wanted to provide you with
    a quick heads up! Besides that, fantastic blog!

  165. Excellent goods from you, man. I have understand your stuff previous to and you’re just extremely
    great. I really like what you’ve acquired here, certainly
    like what you are stating and the way in which you say it.

    You make it entertaining and you still take care of to keep it sensible.

    I can’t wait to read much more from you. This is actually a great website.

  166. you’re in point of fact a just right webmaster. The website loading pace is
    incredible. It sort of feels that you are doing any unique
    trick. Furthermore, The contents are masterwork. you have done
    a wonderful task on this subject!

  167. Its like you read my mind! You seem to know so much about this, like you wrote the book in it or something.
    I think that you could do with a few pics to drive the message home a bit, but
    other than that, this is fantastic blog. A fantastic read.
    I’ll certainly be back.

  168. What i don’t realize is in reality how you’re not
    really a lot more neatly-favored than you may be
    now. You’re so intelligent. You already know thus significantly when it
    comes to this subject, made me personally imagine it from
    numerous various angles. Its like men and women don’t seem to be involved unless
    it is something to do with Girl gaga! Your individual stuffs great.

    All the time deal with it up!