Angular 11 HttpClient – PostgreSQL – Node.js/Express Sequelize CRUD APIs – Post/Get/Put/Delete

Sequelize is a promise-based ORM for Node.js v4 and later. In the tutorial, we will show how to GET/POST/PUT/DELETE requests from Angular 11 Client to PostgreSQL with NodeJs/Express RestAPIs using Sequelize ORM.

Related posts:
Node.js/Express RestAPIs CRUD – Sequelize ORM – PostgreSQL
Node.js/Express RestAPIs – Angular 11 HttpClient – Get/Post/Put/Delete requests + Bootstrap 4

Technologies

  • Angular 11
  • RxJS 6
  • Bootstrap 4
  • Visual Studio Code – version 1.24.0
  • Nodejs – v8.11.3
  • Sequelize
  • PostgreSQL

Demo

Overview

Goal

We create 2 projects:

– Angular Client Project:

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + angular-project-structure

– Node.js RestAPIs project:

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + nodejs-project-structure

UserCase

Start Node.js server -> Logs:


App listening at http://:::8080
Executing (default): DROP TABLE IF EXISTS "customers" CASCADE;
Executing (default): DROP TABLE IF EXISTS "customers" CASCADE;
Executing (default): CREATE TABLE IF NOT EXISTS "customers" ("id"   SERIAL , "firstname" VARCHAR(255), "lastname" VARCHAR(255), "age" INTEGER, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, PRIMARY KEY ("id"));
Executing (default): SELECT i.relname AS name, ix.indisprimary AS primary, ix.indisunique AS unique, ix.indkey AS indkey, array_agg(a.attnum) as column_indexes, array_agg(a.attname) AS column_names, pg_get_indexdef(ix.indexrelid) AS definition FROM pg_class t, pg_class i, pg_index ix, pg_attribute a WHERE t.oid = ix.indrelid AND i.oid = ix.indexrelid AND a.attrelid = t.oid AND t.relkind = 'r' and t.relname = 'customers' GROUP BY i.relname, ix.indexrelid, ix.indisprimary, ix.indisunique, ix.indkey ORDER BY i.relname;
Drop and Resync with { force: true }
Executing (default): INSERT INTO "customers" ("id","firstname","lastname","age","createdAt","updatedAt") VALUES (DEFAULT,'Joe','Thomas',36,'2018-07-11 08:31:06.976 +00:00','2018-07-11 08:31:06.976 +00:00') RETURNING *;
Executing (default): INSERT INTO "customers" ("id","firstname","lastname","age","createdAt","updatedAt") VALUES (DEFAULT,'Peter','Smith',18,'2018-07-11 08:31:06.977 +00:00','2018-07-11 08:31:06.977 +00:00') RETURNING *;
Executing (default): INSERT INTO "customers" ("id","firstname","lastname","age","createdAt","updatedAt") VALUES (DEFAULT,'Lauren','Taylor',31,'2018-07-11 08:31:06.978 +00:00','2018-07-11 08:31:06.978 +00:00') RETURNING *;
Executing (default): INSERT INTO "customers" ("id","firstname","lastname","age","createdAt","updatedAt") VALUES (DEFAULT,'Mary','Taylor',24,'2018-07-11 08:31:06.978 +00:00','2018-07-11 08:31:06.978 +00:00') RETURNING *;
Executing (default): INSERT INTO "customers" ("id","firstname","lastname","age","createdAt","updatedAt") VALUES (DEFAULT,'David','Moore',25,'2018-07-11 08:31:06.978 +00:00','2018-07-11 08:31:06.978 +00:00') RETURNING *;
Executing (default): INSERT INTO "customers" ("id","firstname","lastname","age","createdAt","updatedAt") VALUES (DEFAULT,'Holly','Davies',27,'2018-07-11 08:31:06.978 +00:00','2018-07-11 08:31:06.978 +00:00') RETURNING *;
Executing (default): INSERT INTO "customers" ("id","firstname","lastname","age","createdAt","updatedAt") VALUES (DEFAULT,'Michael','Brown',45,'2018-07-11 08:31:06.979 +00:00','2018-07-11 08:31:06.979 +00:00') RETURNING *;

-> PostgreSQL records:

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + initial-data-postgresql-records

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

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + retrieve-all

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

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + update-form

-> result:

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + update-result

– Delete ‘Peter’ customer:

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + delete-result

– Add a new customer:

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + add-new

-> result:

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + add-result

– Check final customer’s list:

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + check-final-list

-> Sequelize Logs:


Executing (default): SELECT "id", "firstname", "lastname", "age", "createdAt", "updatedAt" FROM "customers" AS "customer";
Executing (default): SELECT "id", "firstname", "lastname", "age", "createdAt", "updatedAt" FROM "customers" AS "customer" WHERE "customer"."id" = '1';
Executing (default): UPDATE "customers" SET "id"=1,"firstname"='Robert',"lastname"='Thomas',"age"=36,"createdAt"='2018-07-11 08:31:06.976 +00:00',"updatedAt"='2018-07-11 08:32:42.344 +00:00' WHERE "id" = 1
Executing (default): SELECT "id", "firstname", "lastname", "age", "createdAt", "updatedAt" FROM "customers" AS "customer";
Executing (default): SELECT "id", "firstname", "lastname", "age", "createdAt", "updatedAt" FROM "customers" AS "customer" WHERE "customer"."id" = '2';
Executing (default): DELETE FROM "customers" WHERE "id" = '2'
Executing (default): SELECT "id", "firstname", "lastname", "age", "createdAt", "updatedAt" FROM "customers" AS "customer";
Executing (default): INSERT INTO "customers" ("id","firstname","lastname","age","createdAt","updatedAt") VALUES (DEFAULT,'Maria','Garcia',39,'2018-07-11 08:33:04.390 +00:00','2018-07-11 08:33:04.390 +00:00') RETURNING *;

-> PostgreSQL’s records:

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + fina-postgresql-records

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 11 HttpClient

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

// 1. GET All Customers from remote SpringBoot API <code>@GetMapping(value="/api/customers")
getCustomers (): Observable<Customer[]> {
	return this.http.get<Customer[]>(this.customersUrl)
}
 
// 2. GET a Customer from remote SpringBoot API <code>@GetMapping(value="/api/customers/{id}")
getCustomer(id: number): Observable<Customer> {
	const url = `${this.customersUrl}/${id}`;
	return this.http.get<Customer>(url);
}
 
// 3. POST a Customer to remote SpringBoot API <code>@PostMapping(value="/api/customers")
addCustomer (customer: Customer): Observable<Customer> {
	return this.http.post<Customer>(this.customersUrl, customer, httpOptions);
}
 
// 4.DELETE a Customer from remote SpringBoot API <code>@DeleteMapping(value="/api/customers/{id}")
deleteCustomer (customer: Customer | number): Observable<Customer> {
	const id = typeof customer === 'number' ? customer : customer.id;
	const url = `${this.customersUrl}/${id}`;
 
	return this.http.delete<Customer>(url, httpOptions);
}
 
// 5. PUT a Customer to remote SpringBoot API <code>@PutMapping(value="/api/customers")
updateCustomer (customer: Customer): Observable<any> {
	return this.http.put(this.customersUrl, customer, httpOptions);
}

Practice

Node.js Express RestAPIs

Setting up NodeJs/Express project

Following the guide to create a NodeJS/Express project.

Install Express, Sequelize, PostgreSQL, and Cors:


$npm install express sequelize pg pg-hstore cors --save

– 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-express-sequelizejs-postgresql",
  "version": "1.0.0",
  "description": "nodejs-express-sequelizejs-postgresql",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "Angular-6-Client-NodeJs-Express-RestAPIs-SequelizeJs-CRUD-PostgreSQL"
  ],
  "author": "JSA",
  "license": "ISC",
  "dependencies": {
    "cors": "^2.8.4",
    "express": "^4.16.3",
    "pg": "^7.4.3",
    "pg-hstore": "^2.3.2",
    "sequelize": "^4.37.6"
  }
}

Setting up Sequelize PostgreSQL connection

– Create ‘./app/config/env.js’ file:


const env = {
  database: 'test',
  username: 'postgres',
  password: '123',
  host: 'localhost',
  dialect: 'postgres',
  pool: {
	  max: 5,
	  min: 0,
	  acquire: 30000,
	  idle: 10000
  }
};
 
module.exports = env;

– Setup Sequelize-PostgreSQL connection in ‘./app/config/db.config.js’ file:


const env = require('./env.js');
 
const Sequelize = require('sequelize');
const sequelize = new Sequelize(env.database, env.username, env.password, {
  host: env.host,
  dialect: env.dialect,
  operatorsAliases: false,
 
  pool: {
    max: env.max,
    min: env.pool.min,
    acquire: env.pool.acquire,
    idle: env.pool.idle
  }
});
 
const db = {};
 
db.Sequelize = Sequelize;
db.sequelize = sequelize;
 
//Models/tables
db.customers = require('../model/customer.model.js')(sequelize, Sequelize);
 
module.exports = db;

Create Sequelize model

Create file ./app/model/customer.model.js file:


module.exports = (sequelize, Sequelize) => {
	const Customer = sequelize.define('customer', {
	  firstname: {
		type: Sequelize.STRING
	  },
	  lastname: {
		type: Sequelize.STRING
	  },
	  age: {
		  type: Sequelize.INTEGER
	  }
	});
	
	return Customer;
}

Express RestAPIs

Route ->
Define Customer’s routes in ‘./app/controller/customer.route.js’ file:


module.exports = function(app) {
    const customers = require('../controller/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/:id', customers.findById);
 
    // Update a Customer with Id
    app.put('/api/customers', customers.update);
 
    // Delete a Customer with Id
    app.delete('/api/customers/:id', customers.delete);
}

Controller
Implement Customer’s controller in ‘./app/controller/customer.controller.js’ file:


const db = require('../config/db.config.js');
const Customer = db.customers;

// Post a Customer
exports.create = (req, res) => {	
	// Save to PostgreSQL database
	Customer.create({
				"firstname": req.body.firstname, 
				"lastname": req.body.lastname, 
				"age": req.body.age
			}).then(customer => {		
			// Send created customer to client
			res.json(customer);
		}).catch(err => {
			console.log(err);
			res.status(500).json({msg: "error", details: err});
		});
};
 
// FETCH All Customers
exports.findAll = (req, res) => {
	Customer.findAll().then(customers => {
			// Send All Customers to Client
			res.json(customers.sort(function(c1, c2){return c1.id - c2.id}));
		}).catch(err => {
			console.log(err);
			res.status(500).json({msg: "error", details: err});
		});
};

// Find a Customer by Id
exports.findById = (req, res) => {	
	Customer.findById(req.params.id).then(customer => {
			res.json(customer);
		}).catch(err => {
			console.log(err);
			res.status(500).json({msg: "error", details: err});
		});
};
 
// Update a Customer
exports.update = (req, res) => {
	const id = req.body.id;
	Customer.update( req.body, 
			{ where: {id: id} }).then(() => {
				res.status(200).json( { mgs: "Updated Successfully -> Customer Id = " + id } );
			}).catch(err => {
				console.log(err);
				res.status(500).json({msg: "error", details: err});
			});
};

// Delete a Customer by Id
exports.delete = (req, res) => {
	const id = req.params.id;
	Customer.destroy({
			where: { id: id }
		}).then(() => {
			res.status(200).json( { msg: 'Deleted Successfully -> Customer Id = ' + id } );
		}).catch(err => {
			console.log(err);
			res.status(500).json({msg: "error", details: err});
		});
};

Server.js

server.js ->


var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json())
 
const cors = require('cors')
const corsOptions = {
  origin: 'http://localhost:4200',
  optionsSuccessStatus: 200
}
 
app.use(cors(corsOptions))
 
const db = require('./app/config/db.config.js');
  
// force: true will drop the table if it already exists
db.sequelize.sync({force: true}).then(() => {
  console.log('Drop and Resync with { force: true }');
  initial();
});
 
require('./app/route/customer.route.js')(app);
 
// Create a Server
var 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 PostgreSQL
  const Customer = db.customers;
  for (let i = 0; i < customers.length; i++) { 
    Customer.create(customers[i]);  
  }
}

Angular 11 Client

Data Model

customer.ts ->


export class Customer {
    id: number;
    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: number): 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 | number): Observable {
    const id = typeof customer === 'number' ? 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-http-client-nodejs-express-sequelize-crud-postgresql + retrieve-all

– 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 :

<h5>All Customers</h5>
<div *ngFor="let cust of customers">
  <a [routerLink]="['/customers', cust.id]" style="color:black"><span class="badge badge-dark">{{cust.id}}</span> -> {{ cust.firstname }}</a>
</div>

Customer Detail Component

Customer Detail ->

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + update-form

-> results:

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + update-result

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + delete-result

– 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(() => this.message = "Customer Updated Successfully!");
  }
 
  delete(): void {
    this.submitted = true;
    this.customerService.deleteCustomer(this.customer.id)
        .subscribe(()=> this.message = "Customer Deleted Successfully!");
  }
 
  goBack(): void {
    this.location.back();
  }
}

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

<h4><span class="badge badge-light ">{{customer.id}}</span> -> {{customer.firstname}}</h4>
<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-http-client-nodejs-express-sequelize-crud-postgresql + add-new

-> result:

angular-6-http-client-nodejs-express-sequelize-crud-postgresql + add-result

– 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 {
    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
- Nodejs-Express-Sequelizejs-PostgreSQL

372 thoughts on “Angular 11 HttpClient – PostgreSQL – Node.js/Express Sequelize CRUD APIs – Post/Get/Put/Delete”

  1. 185728 105481Hello. fantastic job. I did not expect this. This really is a great story. Thanks! You made certain fine points there. I did a search on the topic matter and discovered the majority of folks will have the same opinion together with your blog. 806385

  2. Aw, this became a very good post. In concept I must set up writing like this moreover – taking time and actual effort to produce a really good article… but exactly what can I say… I procrastinate alot and by no indicates apparently go completed.

  3. A person essentially assist to make significantly posts I’d state. That is the first time I frequented your website page and to this point? I amazed with the analysis you made to make this particular post incredible. Magnificent process!

  4. I think this is one of the most important information for me. And i’m glad reading your article. But want to remark on some general things, The website style is wonderful, the articles is really great : D. Good job, cheers

  5. 385610 80433Youd outstanding guidelines there. I did a search about the field and identified that quite likely the majority will agree along with your internet page. 894096

  6. I simply could not depart your web site before suggesting that I really loved the standard information a person provide in your visitors?
    Is gonna be back continuously to check up on new posts

  7. You can definitely see your expertise in the work you write.
    The world hopes for more passionate writers such as you
    who are not afraid to say how they believe. All the time go after your heart.

  8. That is really interesting, You’re an overly
    skilled blogger. I have joined your rss feed and look forward to in the hunt for more of your fantastic post.
    Also, I have shared your website in my social networks

  9. I’m extremely 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 excellent quality writing, it is rare to
    see a nice blog like this one nowadays.

  10. 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

  11. My programmer is trying to persuade me to move to .net
    from PHP. I have always disliked the idea because of the costs.
    But he’s tryiong none the less. I’ve been using
    Movable-type on a number of websites for about a year and am anxious
    about switching to another platform. I have heard good things about blogengine.net.
    Is there a way I can transfer all my wordpress
    content into it? Any kind of help would be really appreciated!

  12. Thanks for your marvelous posting! I seriously enjoyed reading it, you’re a great author.
    I will make sure to bookmark your blog and will come back later in life.
    I want to encourage you to ultimately continue your great
    work, have a nice day!

  13. What i don’t realize is actually how you are not actually a lot more smartly-liked than you might be now.

    You’re very intelligent. You understand therefore considerably relating to this matter, made me in my view imagine it from a lot of numerous angles.

    Its like men and women don’t seem to be fascinated
    until it’s one thing to do with Woman gaga! Your own stuffs outstanding.
    At all times take care of it up!

  14. Excellent post. I was checking constantly this blog and I am impressed!
    Extremely helpful info specially the last part 🙂 I care for
    such info a lot. I was seeking this particular info for a very long
    time. Thank you and best of luck.

  15. Unquestionably believe that which you said.
    Your favorite reason seemed to be on the internet the simplest thing to
    be aware of. I say to you, I definitely get irked while people
    consider worries that they plainly do not know about.

    You managed to hit the nail upon the top as well as defined out the whole thing
    without having side-effects , people can take a signal.

    Will likely be back to get more. Thanks

  16. I’m not sure why but this website is loading very slow for me.
    Is anyone else having this problem or is it a issue on my end?
    I’ll check back later on and see if the problem still exists.

  17. Hi! I know this is somewhat off topic but I was wondering which
    blog platform are you using for this website? I’m getting sick and tired
    of WordPress because I’ve had issues with hackers and I’m looking at alternatives for another
    platform. I would be great if you could point me in the
    direction of a good platform.

  18. It is the best time to make some plans for the longer term and it is time to be happy.
    I’ve learn this post and if I may just I desire to suggest you some attention-grabbing things or suggestions.
    Maybe you can write next articles referring to this article.

    I want to learn more issues about it!

  19. 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 got an nervousness 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 hike.

  20. It’s remarkable to pay a visit this web page and reading the views of all colleagues on the topic of this paragraph, while I am also
    eager of getting familiarity.

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

  22. This design is steller! You most certainly 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!

  23. Woah! I’m really digging the template/theme of this blog.
    It’s simple, yet effective. A lot of times it’s tough to get that “perfect balance” between user friendliness
    and appearance. I must say that you’ve done a awesome job with this.
    Also, the blog loads super fast for me on Opera. Exceptional Blog!

  24. Hey there! This is my first visit to your blog! We are
    a collection of volunteers and starting a new project in a community in the same niche.
    Your blog provided us useful information to work on.
    You have done a outstanding job!

  25. I really like your blog.. very nice colors & theme.
    Did you create this website yourself or did you hire someone to
    do it for you? Plz respond as I’m looking to design my own blog and would like to know
    where u got this from. thank you

  26. Hey! This is my 1st comment here so I just wanted to give
    a quick shout out and say I truly enjoy reading through
    your articles. Can you recommend any other blogs/websites/forums that go over the same subjects?
    Thanks a ton!

  27. 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.

  28. hello there and thank you for your information – I have definitely picked
    up something new from right here. I did however expertise several technical issues using
    this website, since I experienced to reload the web site many
    times previous to I could get it to load properly. I had been wondering
    if your web host is OK? Not that I am complaining, but sluggish loading instances times will
    sometimes affect your placement in google and could damage your quality score
    if ads and marketing with Adwords. Well I am adding
    this RSS to my email and could look out for a lot more of your respective fascinating content.
    Make sure you update this again soon.

  29. Oh my goodness! Incredible article dude! Thanks, However I am
    experiencing difficulties with your RSS. I don’t know the
    reason why I cannot subscribe to it. Is there anyone else getting the same RSS problems?
    Anyone who knows the solution can you kindly respond? Thanks!!

  30. Greetings! This is my first comment here so I just wanted to give a quick shout
    out and tell you I genuinely enjoy reading your articles.
    Can you recommend any other blogs/websites/forums that deal with the same topics?
    Thanks for your time!

  31. One casualty in the move is Friday night time’s jazz
    host of “Jazz from Studio 4”, Steve Schwartz, who’s out of a gig after 27 years with the station. Check
    if the photographer uses natural or studio lighting. It’s extraordinarily important to remember that winning odds will vary depending on the bet stage, so
    make sure that to examine the information section first.
    Check on-line for transport charges. In late September(BRW 9/28), Savage ended
    his nationally syndicated show which ran on WRKO 680 since
    November 2002. Savage said he would be off the air
    for “some time.” In accordance with published
    media reports, he mentioned he turned down massive cash to do an Internet-only show.

    Starting right now, talker WRKO 680 has a brand new morning present -“The Kuhner Report” hosted by Jeff
    Kuhner. WRKO which could be the logical selection as Savage’s residence below the
    new nationwide syndication deal is for now opting to air Mark Levin’s present
    in Savage’s former slot(7pm-10pm). Schedule change :
    After a 7-yr Sunday night time run on WRKO 680, “Pundit Review”,
    a local and dwell program hosted by a politics/information junkie blogger Kevin Whalen aired its final present on July 15.
    The radio show was based on The Pundit Review blog debuted in May 2005.
    You’ll be able to hear the final episode right here.

  32. My brother suggested I may like this website. He was once totally right.
    This post actually made my day. You can not imagine just how a lot time I had spent for this info!

    Thank you!

  33. A person necessarily help to make critically posts I’d
    state. That is the first time I frequented your web page and to this point?
    I surprised with the research you made to make this particular post amazing.
    Wonderful task!

  34. I loved as much as you’ll 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 since exactly the same nearly very
    often inside case you shield this increase.

  35. Hey very nice blog!! Man .. Beautiful .. Amazing ..
    I’ll bookmark your site and take the feeds also? I am glad to find numerous useful info here
    within the put up, we’d like work out more techniques in this regard, thanks for sharing.
    . . . . .

  36. Hey there! I know this is somewhat off topic but I was wondering if you
    knew where I could locate a captcha plugin for my comment form?

    I’m using the same blog platform as yours and I’m having difficulty finding one?
    Thanks a lot!

  37. I do agree with all of the concepts you have presented to your post.
    They’re really convincing and will definitely work.
    Still, the posts are too brief for novices.
    Could you please prolong them a little from next time?
    Thank you for the post.

  38. Thank you, I’ve just been searching for info about this topic for ages
    and yours is the greatest I’ve came upon till now. But, what concerning the conclusion? Are you sure concerning the source?

  39. Hey there! I could have sworn I’ve been to this website before
    but after browsing through some of the post I realized it’s new to me.
    Anyhow, I’m definitely delighted I found it and I’ll be book-marking and checking
    back often!

  40. Hi there, I found your website by means of Google even as
    looking for a similar subject, your web site came up, it seems to be good.
    I have bookmarked it in my google bookmarks.
    Hello there, just changed into alert to your blog thru Google, and found that it
    is truly informative. I am going to watch out for brussels.
    I will be grateful if you proceed this in future.
    Many people will be benefited out of your writing. Cheers!

  41. Thanks for the marvelous posting! I quite enjoyed reading it, you will be a
    great author.I will always bookmark your blog and definitely will come
    back sometime soon. I want to encourage
    you to ultimately continue your great job, have
    a nice afternoon!

  42. Great post. I was checking continuously this blog and I am impressed!
    Very useful info specifically the last part 🙂 I care for such info a lot.
    I was looking for this certain information for a long time.

    Thank you and best of luck.

  43. hello there and thank you for your info –
    I’ve definitely picked up something new from right here.
    I did however expertise some technical issues using this site, since I experienced to reload the website a lot of times previous to I could
    get it to load properly. I had been wondering if your web hosting
    is OK? Not that I am complaining, but slow
    loading instances times will very frequently affect your placement in google and
    can damage your quality score if advertising and marketing
    with Adwords. Anyway I’m adding this RSS to my e-mail and can look out for a lot more of your respective
    intriguing content. Make sure you update this again very soon.

  44. hey there and thank you for your information – I’ve definitely picked up something new
    from right here. I did however expertise some technical
    issues using this site, since I experienced to reload the website many times previous to I could get it to load
    properly. I had been wondering if your web host is OK? Not that I’m complaining,
    but sluggish loading instances times will sometimes affect your placement in google and could damage your high-quality score if advertising
    and marketing with Adwords. Well I’m adding
    this RSS to my email and can look out for a lot more
    of your respective intriguing content. Make sure you update this again very soon.

  45. Great work! This is the kind of information that are meant to be shared across the internet.
    Shame on the seek engines for now not positioning this put up upper!
    Come on over and visit my site . Thank you =)

  46. Good day very cool website!! Man .. Beautiful ..
    Wonderful .. I will bookmark your web site and take the feeds also?
    I am satisfied to find numerous useful info
    right here in the put up, we’d like develop more strategies in this regard, thank you for sharing.
    . . . . .

  47. of course like your web-site but you have to take
    a look at the spelling on several of your posts. Many of them are rife with spelling issues and
    I in finding it very bothersome to tell the reality however I will
    surely come again again.

  48. I have to thank you for the efforts you have put in writing this blog.
    I am hoping to see the same high-grade content by you later on as well.
    In truth, your creative writing abilities has inspired me to get my own, personal blog now
    😉

  49. My brother recommended I might like this website.
    He was once entirely right. This publish truly made my day.
    You cann’t imagine just how a lot time I had spent for this information! Thank you!

  50. Hi there! 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 post or vice-versa?
    My site covers a lot of the same subjects as yours and I
    believe we could greatly benefit from each other. If you are interested feel free to shoot me an e-mail.
    I look forward to hearing from you! Excellent blog by the
    way!

  51. My brother suggested I might like this web site.
    He was totally right. This post actually made my day.
    You can not imagine simply how much time I had spent for this
    information! Thanks!

  52. I really love your site.. Excellent colors & theme.
    Did you develop this web site yourself? Please reply back as I’m planning to create my
    own blog and want to learn where you got this from or what the theme
    is named. Kudos!

  53. Write more, thats all I have to say. Literally,
    it seems as though you relied on the video to make your point.
    You clearly know what youre talking about, why waste your intelligence on just posting videos to your site
    when you could be giving us something enlightening to read?

  54. Hi, I do think this is a great web site. I stumbledupon it 😉 I’m going to come back yet again since i
    have saved as a favorite it. Money and freedom is
    the greatest way to change, may you be rich and continue to guide
    others.

  55. Meski begitu, ada sejumlah kendala yang
    seringkali dihadapi saat akan bermain slot sering
    kasih jackpot. To entry the Micro SD card slot in your Nintendo Switch, merely pop out the kickstand on the back of the Switch.
    The reason for this is that the Switch only supports UHS-1 cards, which
    max out at 104MB/s by way of speed. Besides, cartridges are nearly all the time slower than Micro SD cards, so irrespective of which you
    go for, you’re going to get improved loading speeds.

    It is also essential to have your proper hand on her shoulder blade by the end of two so as to control how far you
    want her to go out on 3. So, I’ll throw warning to the winds and suggest that you
    solely need to guide sufficient turn to get your right hand on her
    shoulder blade with out working the hazard of getting pace bumps.
    Given how little the speed differs between the different playing cards that the Switch
    does help, we advocate simply ignoring that side totally and simply grabbing
    the cheapest yow will discover. That’s why we have targeted
    purely on the most effective worth for cash, as there’s a considerably larger
    distinction between the costs of two micro SD cards
    than there’s the velocity.

  56. Great article! That is the type of info that are supposed to be shared across the net.

    Disgrace on Google for not positioning this post higher! Come
    on over and talk over with my web site . Thanks =)

  57. Hey just wanted to give you a quick heads up. The text in your article seem to be running
    off the screen in Chrome. I’m not sure if this is a format issue or something to do with internet browser compatibility but
    I figured I’d post to let you know. The design and style
    look great though! Hope you get the issue resolved soon. Thanks

  58. I’m curious to find out what blog platform you are working with?
    I’m experiencing some minor security problems with
    my latest website and I’d like to find something more risk-free.
    Do you have any solutions?

  59. I am extremely impressed with your writing skills and also 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 today.

  60. Hello, Neat post. There’s an issue with your site in internet explorer, might check this?
    IE nonetheless is the market leader and a big section of folks will leave out your wonderful
    writing because of this problem.

  61. Wow, fantastic blog layout! How long have you been blogging for?
    you make blogging look easy. The overall look of your web site is fantastic, let alone the content!

  62. Please let me know if you’re looking for a article author for your site.

    You have some really good posts and I think I would be a good asset.

    If you ever want to take some of the load off, I’d
    really like to write some material for your
    blog in exchange for a link back to mine. Please send me an e-mail if interested.
    Kudos!

  63. Hi there to all, how is the whole thing, I think every one
    is getting more from this site, and your views are good designed for new visitors.

  64. Have you ever thought about adding a little bit more than just your articles?

    I mean, what you say is valuable and everything. Nevertheless think
    about if you added some great photos or videos to give your posts more, “pop”!
    Your content is excellent but with pics and videos,
    this blog could certainly be one of the greatest in its field.
    Good blog!

  65. Incredible! This blog looks just like my old one!
    It’s on a totally different topic but it has pretty
    much the same layout and design. Great choice of colors!

  66. After exploring a number of the blog posts on your web site,
    I really like your technique of blogging. I added it to my bookmark webpage list and will be checking back in the near future.
    Please check out my web site as well and let me know how you feel.

  67. 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 several emails
    with the same comment. Is there any way you can remove me from that service?

    Thanks!

  68. We are a gaggle of volunteers and starting a new scheme in our community.
    Your site offered us with valuable information to work
    on. You have performed a formidable process and our entire community can be thankful to you.

  69. Have you ever thought about creating an ebook or guest authoring on other websites?
    I have a blog centered 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’re even remotely interested, feel free to shoot me an e-mail.

  70. Hello! I know this is kinda off topic but I was wondering if you knew where I
    could get a captcha plugin for my comment form?
    I’m using the same blog platform as yours and I’m having problems finding one?
    Thanks a lot!

  71. I am curious to find out what blog system you are utilizing?

    I’m experiencing some minor security issues with my latest
    blog and I’d like to find something more risk-free.
    Do you have any suggestions?

  72. Have you ever thought about writing an ebook or guest authoring on other
    blogs? I have a blog based upon on the same topics you discuss and would really like
    to have you share some stories/information. I know my
    audience would appreciate your work. If you are even remotely interested, feel free
    to send me an e-mail.

  73. Excellent article. Keep writing such kind of information on your page.
    Im really impressed by your blog.
    Hi there, You’ve done a fantastic job. I’ll definitely digg it and personally recommend to my friends.

    I am sure they’ll be benefited from this site.

  74. Awesome blog! Do you have any tips and hints for aspiring writers?
    I’m hoping to start my own website soon but I’m a little lost on everything.

    Would you suggest starting with a free platform like WordPress or go for a paid
    option? There are so many choices out there that
    I’m completely overwhelmed .. Any suggestions? Kudos!

  75. Its like you read my mind! You seem to know a lot
    about this, like you wrote the book in it or something.
    I think that you can do with a few pics to drive
    the message home a little bit, but instead of that, this is great blog.
    A fantastic read. I’ll definitely be back.

  76. 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 exclusive content I’ve either written myself or outsourced but it appears a lot of it is popping it up all over the web without my permission. Do you know any techniques to help protect against content from being stolen? I’d certainly appreciate it.

  77. I absolutely love your website.. Pleasant colors & theme.
    Did you develop this web site yourself? Please reply back as I’m attempting to create my own site and would like to find out where
    you got this from or exactly what the theme is called.

    Cheers!

  78. May I simply say what a comfort to find somebody who truly knows
    what they are talking about on the internet.
    You certainly realize how to bring an issue to light and
    make it important. More people must read this and understand
    this side of the story. I was surprised you aren’t more popular because you certainly possess the gift.

  79. Woah! I’m really enjoying the template/theme of this website.
    It’s simple, yet effective. A lot of times it’s
    very hard to get that “perfect balance” between usability and appearance.
    I must say you’ve done a amazing job with this.
    Additionally, the blog loads very quick for me on Opera.
    Excellent Blog!

  80. Hi there! Do you know if they make any plugins to help 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. Appreciate it!

  81. What’s Going down i am new to this, I stumbled upon this
    I’ve discovered It absolutely helpful and it has helped me out loads.
    I am hoping to contribute & help other customers like its helped
    me. Good job.

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

  83. Excellent post. I used to be checking continuously this
    blog and I’m inspired! Very helpful information specifically the remaining part :
    ) I care for such info a lot. I was seeking this certain info for a very
    lengthy time. Thanks and good luck.

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

  85. hi!,I love your writing so so much! proportion we be in contact extra about your post
    on AOL? I need an expert in this area to resolve my problem.

    Maybe that’s you! Taking a look ahead to look you.

  86. Today, I went to the beachfront with my children. I found
    a sea shell and gave it to my 4 year old daughter and said
    “You can hear the ocean if you put this to your ear.” She placed the
    shell to her ear and screamed. There was a hermit crab inside and it pinched her ear.
    She never wants to go back! LoL I know this
    is completely off topic but I had to tell someone!

  87. That is really interesting, You are a very professional blogger.
    I’ve joined your feed and look forward to seeking more of your excellent
    post. Additionally, I have shared your site
    in my social networks

  88. Wonderful blog! I found it while surfing around on Yahoo News.
    Do you have any suggestions on how to get listed in Yahoo News?
    I’ve been trying for a while but I never seem to get there!

    Appreciate it

  89. You’re so awesome! I do not suppose I’ve read through anything like
    that before. So wonderful to find another person with a few original thoughts
    on this subject matter. Really.. many thanks for starting this up.

    This site is one thing that is needed on the internet, someone with a bit
    of originality!

  90. Excellent beat ! I would like to apprentice while you amend your website, how could i subscribe for a blog web site?
    The account helped me a acceptable deal. I had been a little
    bit acquainted of this your broadcast provided bright
    clear concept

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

  92. I’ve been surfing online more than three hours these days, but I
    by no means found any interesting article like yours. It is beautiful worth sufficient for me.

    In my opinion, if all web owners and bloggers made good content as you did,
    the internet will probably be a lot more helpful than ever before.

  93. whoah this blog is magnificent i really like reading your articles.

    Stay up the good work! You already know, many people
    are searching round for this info, you can aid them greatly.

  94. Hi! I know this is somewhat off topic but I was wondering if
    you knew where I could get a captcha plugin for
    my comment form? I’m using the same blog platform as yours and I’m having trouble
    finding one? Thanks a lot!

  95. Nice post. I learn something totally new and challenging on blogs I stumbleupon every
    day. It will always be exciting to read articles from other writers and practice something from other websites.

  96. Please let me know if you’re looking for a 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 really like to
    write some content for your blog in exchange for a link
    back to mine. Please send me an email if interested. Thank you!

  97. It’s really a great and useful piece of info. I’m satisfied that
    you shared this useful information with us.
    Please keep us up to date like this. Thanks for sharing.

  98. Today, I went to the beachfront with my kids. I found a sea shell and gave it to my 4 year old daughter and said “You can hear the ocean if you put this to your ear.” She put the shell to
    her ear and screamed. There was a hermit crab inside and it pinched her ear.
    She never wants to go back! LoL I know this is totally off topic but I
    had to tell someone!

  99. each time i used to read smaller posts which as well clear their motive, and
    that is also happening with this piece of writing which
    I am reading at this place.

  100. Sweet blog! I found it while surfing around on Yahoo News.
    Do you have any tips on how to get listed in Yahoo News?

    I’ve been trying for a while but I never seem
    to get there! Thanks

  101. Very nice post. I just stumbled upon your weblog and wanted to say that I have truly enjoyed browsing your
    blog posts. In any case I’ll be subscribing to your rss feed
    and I hope you write again soon!

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

  103. This is really interesting, You are a very skilled blogger.

    I have joined your feed and look forward to seeking
    more of your excellent post. Also, I have shared your website in my social networks!

  104. great post, very informative. I ponder why the opposite experts of this sector do not notice
    this. You should continue your writing. I am confident, you have a great readers’ base already!

  105. Interesting blog! Is your theme custom made or did you download
    it from somewhere? A design like yours with a few simple adjustements would really make my blog
    stand out. Please let me know where you got your design. Thanks a
    lot

  106. What i don’t understood is in truth how you are no longer really a lot more well-favored than you may be right now.

    You’re very intelligent. You know thus significantly in relation to this matter,
    produced me personally believe it from a lot of varied
    angles. Its like men and women are not interested until it’s one thing to do with Woman gaga!

    Your individual stuffs great. All the time care for it up!

  107. Wow, fantastic blog layout! How long have you been blogging for?

    you make blogging look easy. The overall look of your website is great, as well as the
    content!

  108. Appreciating the hard work you put into your site and detailed information you present.
    It’s great to come across a blog every once in a while that
    isn’t the same out of date rehashed material. Excellent read!
    I’ve bookmarked your site and I’m including your RSS feeds to my Google account.

  109. I’m now not certain the place you’re getting your information, but great
    topic. I must spend some time studying more or working out more.
    Thank you for great info I was on the lookout for this info for my mission.

  110. 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.

  111. Oh my goodness! Impressive article dude! Thank you, However I am having difficulties with your
    RSS. I don’t understand the reason why I can’t join it.
    Is there anyone else getting similar RSS issues? Anyone that knows the solution will you
    kindly respond? Thanks!!

  112. Hi there I am so happy I found your site, I really found
    you by error, while I was searching on Bing for
    something else, Regardless I am here now and would just
    like to say thanks for a tremendous post and a all round interesting blog (I also love the theme/design),
    I don’t have time to go through it all at the minute
    but I have bookmarked it and also added your RSS feeds, so when I have time I will be back to read a lot
    more, Please do keep up the awesome job.

  113. Greetings I am so thrilled I found your weblog, I really found you by accident, while I was searching on Bing for something else, Nonetheless I am here
    now and would just like to say kudos for a
    incredible post and a all round enjoyable blog (I also
    love the theme/design), I don’t have time to read through it all at
    the moment but I have bookmarked 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 awesome work.

  114. I like what you guys tend to be up too. This kind of clever work and coverage!
    Keep up the fantastic works guys I’ve incorporated you guys to my blogroll.

  115. I think this is among the most vital information for me.
    And i am glad reading your article. But want to remark on some general things, The
    site style is wonderful, the articles is really great : D.
    Good job, cheers

  116. You really make it seem so easy with your presentation but I find this topic 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’ll try to get the hang of it!

  117. It’s a shame 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. Chat soon!

  118. Howdy! I understand this is somewhat off-topic however I needed
    to ask. Does building a well-established website such
    as yours require a lot of work? I am completely new to running
    a blog however I do write in my journal daily. I’d like to start a blog
    so I will be able to share my own experience and views online.
    Please let me know if you have any suggestions or tips for brand new
    aspiring bloggers. Appreciate it!

  119. I think this is among the most vital info for me.
    And i am glad reading your article. But want to remark on few general things, The website style is ideal, the articles is really excellent
    : D. Good job, cheers

  120. I loved as much as you will receive carried out right here.
    The sketch is attractive, your authored material stylish.
    nonetheless, you command get got 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 hike.

  121. The assessment is incredibly interesting. If you wish to experience agen slot
    online, I love to advise participating in in reliable agen slot online niche sites.
    As you can gain big benefits and get hold of given the assurance affiliate marketing winnings.
    When you need to perceive, you may upright take a peek through listed below.
    The hyperlink can be a dock web site that is frequently used
    among Indonesian players.

  122. Wonderful beat ! I would like to apprentice at the same time as you amend your web site, how can i subscribe for a weblog
    website? The account helped me a acceptable deal.
    I were tiny bit familiar of this your broadcast
    provided bright transparent idea

  123. My partner and I stumbled over here from a different page and thought I might
    as well check things out. I like what I see so now i am following you.
    Look forward to looking at your web page yet again.

  124. When I originally 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!

  125. You can definitely see your enthusiasm within the article
    you write. The sector hopes for more passionate writers like you who aren’t afraid to say how they
    believe. All the time go after your heart.

  126. Woah! I’m really loving the template/theme of this site.
    It’s simple, yet effective. A lot of times it’s very difficult to get that “perfect balance” between usability and appearance.

    I must say that you’ve done a fantastic job with this.
    In addition, the blog loads very fast for me on Internet explorer.
    Outstanding Blog!

  127. I have been exploring for a bit for any high-quality articles or weblog posts
    in this sort of space . Exploring in Yahoo I ultimately stumbled upon this website.
    Studying this info So i am glad to exhibit that I have an incredibly excellent
    uncanny feeling I found out exactly what I needed. I such
    a lot indubitably will make certain to do not put out of your mind this website and give it a look regularly.

  128. I really love your site.. Very nice colors & theme.

    Did you develop this web site yourself? Please reply
    back as I’m planning to create my very own site and would like to
    find out where you got this from or exactly what
    the theme is named. Thank you!

  129. Wonderful blog! Do you have any tips for aspiring writers?

    I’m hoping to start my own blog soon but I’m a little lost
    on everything. Would you suggest starting with a free platform like
    Wordpress or go for a paid option? There are so many choices out
    there that I’m totally confused .. Any tips? Cheers!

  130. Great beat ! I would like to apprentice while you amend your website, how can i subscribe for a weblog web site?
    The account aided me a appropriate deal. I had been a little bit acquainted of this
    your broadcast provided brilliant clear concept

  131. Hi this is somewhat 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 skills so
    I wanted to get advice from someone with experience.
    Any help would be greatly appreciated!

  132. Great beat ! I wish to apprentice while you amend your website,
    how can i subscribe for a blog site? The account helped me a acceptable deal.
    I had been tiny bit acquainted of this your broadcast offered
    bright clear concept

  133. Simply wish to say your article is as astonishing.
    The clarity for your post is simply nice and that i can suppose you are an expert on this subject.
    Well along with your permission let me to grab your RSS feed to keep up to date with imminent post.
    Thank you a million and please continue the gratifying work.

  134. You made some decent points there. I looked on the net for additional information about the issue and found most people will go along with your views on this site.

  135. I’m extremely impressed with your writing skills and also 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 nice blog like this one today.

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

  137. I know this if off topic but I’m looking into starting my own weblog and was curious what all is needed to get set up?
    I’m assuming having a blog like yours would
    cost a pretty penny? I’m not very web smart so I’m not 100% sure.
    Any recommendations or advice would be greatly appreciated.
    Many thanks

  138. Hey there! This is my 1st comment here so I just wanted to give
    a quick shout out and say I genuinely enjoy reading through your blog
    posts. Can you suggest any other blogs/websites/forums
    that go over the same subjects? Thanks a ton!

  139. fantastic issues altogether, you simply received a emblem new reader.

    What would you recommend about your submit that you made a few days in the
    past? Any positive?

  140. Generally I do not read article on blogs, however I would like to
    say that this write-up very forced me to check out and do so!
    Your writing style has been surprised me. Thanks,
    very great article.

  141. Hi! I understand this is sort of off-topic but I had to ask.
    Does building a well-established blog like yours take a lot
    of work? I am brand new to operating a blog
    however I do write in my diary on a daily basis. I’d like to start a blog so I will be able to share my experience and feelings online.

    Please let me know if you have any kind of ideas or tips for new aspiring
    bloggers. Thankyou!

  142. Good day! This is kind of off topic but I need some help from an established blog.
    Is it tough to set up your own blog? I’m not very techincal but I can figure things out pretty fast.
    I’m thinking about creating my own but I’m not sure where to
    begin. Do you have any points or suggestions? Many thanks

  143. You can definitely see your skills within the work you write.
    The sector hopes for more passionate writers such as you who aren’t afraid to say how they believe.
    At all times go after your heart.

  144. An outstanding share! I have just forwarded this onto a colleague who had been conducting a little homework on this.

    And he in fact bought me lunch due to the fact that I found it for him…

    lol. So let me reword this…. Thanks for the meal!!

    But yeah, thanx for spending time to discuss this matter here on your site.

  145. My programmer is trying to persuade me to move to .net from PHP.
    I have always disliked the idea because of the costs.
    But he’s tryiong none the less. I’ve been using WordPress on numerous
    websites for about a year and am anxious about switching to another platform.

    I have heard very good things about blogengine.net. Is there a way
    I can transfer all my wordpress content into it?

    Any help would be greatly appreciated!

  146. Hi would you mind letting me know which hosting company you’re utilizing?
    I’ve loaded your blog in 3 different internet browsers and I must say this blog loads
    a lot quicker then most. Can you recommend a good web hosting provider at a reasonable price?
    Kudos, I appreciate it!

  147. Having read this I thought it was extremely enlightening.
    I appreciate you spending some time and effort to put
    this information together. I once again find myself spending a significant amount of time
    both reading and posting comments. But so what, it
    was still worthwhile!

  148. I think that everything posted was very logical. However, think about this,
    what if you typed a catchier post title? I am not suggesting your information is
    not good, but what if you added a headline that makes people want more?
    I mean ozenero | Mobile & Web Programming Tutorials is
    kinda plain. You should look at Yahoo’s front page and note how they create
    article titles to get people interested. You might add a video or a related picture or two to get people excited about everything’ve written. In my opinion, it could bring your
    blog a little livelier.

  149. When someone writes an piece of writing he/she maintains
    the plan of a user in his/her brain that how a user can know it.
    So that’s why this paragraph is amazing. Thanks!

  150. Fantastic site. Lots of useful information here. I am sending it to several
    friends ans also sharing in delicious. And naturally, thank you to your sweat!

  151. Appreciating the persistence you put into your
    website and detailed information you present. It’s
    great to come across a blog every once in a while that isn’t the same
    out of date rehashed information. Wonderful read! I’ve saved your
    site and I’m including your RSS feeds to my Google account.

  152. Hi there! I could have sworn I’ve visited this web site
    before but after browsing through some of the articles I realized it’s new to me.
    Anyways, I’m definitely pleased I stumbled upon it and I’ll
    be book-marking it and checking back often!

  153. Do you mind if I quote a couple of your posts as long as I provide credit
    and sources back to your website? My blog site is in the exact same
    niche as yours and my users would certainly benefit from some of the information you present here.
    Please let me know if this okay with you. Thank you!

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

  155. Just desire to say your article is as astounding. The clarity in your put up is just excellent and i could
    assume you are a professional on this subject. Well along with your permission let me to clutch your feed to keep updated with approaching post.
    Thanks 1,000,000 and please keep up the rewarding work.

  156. I like the helpful information you supply to your articles.
    I will bookmark your blog and test again right here regularly.
    I’m relatively certain I will be informed many new stuff right here!
    Best of luck for the next!

  157. Really interesting search at. If you wish to appreciate stop, much more my website page since there are a whole lot of gaming applications.
    On Indonesia, the next match may be known as situs judi online.

Leave a Reply

Your email address will not be published. Required fields are marked *