Angularjs app connectivity with Mongodb using nodejs : This is my angular app it is working alright and taking data from an array in controller using ng-repeat but now i want to connect it with Mongodb using node so that it fetch data from mongodb collection and when i edit,update or may delete any row it should reflect that in mongodb.here is my angularjs index.html





    <html>
       <head>
          <style type="text/css">@charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>
          <meta http-equiv="content-type" content="text/html; charset=UTF-8">
          <meta name="robots" content="noindex, nofollow">
          <meta name="googlebot" content="noindex, nofollow">
          <meta name="viewport" content="width=device-width, initial-scale=1">
          <script type="text/javascript" src="/js/lib/dummy.js"></script>
          <script type="text/javascript" src="http://underscorejs.org/underscore.js"></script>
          <link rel="stylesheet" type="text/css" href="/css/result-light.css">
          <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
          <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-sanitize.min.js"></script>
          <link rel="stylesheet" type="text/css" href="https://netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
          <script type="text/javascript" src="http://vitalets.github.io/angular-xeditable/dist/js/xeditable.js"></script>
          <link rel="stylesheet" type="text/css" href="http://vitalets.github.io/angular-xeditable/dist/css/xeditable.css">
          <script type="text/javascript" src="https://code.angularjs.org/1.5.8/angular-mocks.js"></script>
          <link rel="stylesheet" type="text/css" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.0/css/bootstrap.min.css"/>
          <style type="text/css">
             div[ng-app] {
             margin: 10px;
             }
             .table {width: 100%
             }
             form[editable-form] > div {margin: 100px 0;}
          </style>
       </head>
       <body>
          <h4>Book management</h4>
          <div ng-app="app" ng-controller="Ctrl">
             <div class="input-group">
                <input class="form-control"   ng-model="searchText" placeholder="Search" type="search" ng-change="search()" />
                <span class="input-group-addon">
                <span class="glyphicon glyphicon-search"></span>
                </span>
             </div>
             <br>
             <br>
             <table class="table table-bordered table-hover table-condensed" id="myTable">
                <tr style="font-weight: bold">
                   <td style="width:5%">id</td>
                   <td style="width:15%"><a href="" ng-click="columnToOrder='';reverse=!reverse">Book Name</a></td>
                   <td style="width:15%"><a href="" ng-click="columnToOrder='Author';reverse=!reverse">Author Name</a></td>
                   <td style="width:15%"><a href="" ng-click="columnToOrder='page';reverse=!reverse">No Of Page</a></td>
                   <td style=width:30%><a href="" ng-click="columnToOrder='date';reverse=!reverse">Date</a></td>
                   <td style="width:25%">Edit</td>
                </tr>
                <tr ng-repeat="x in ItemsByPage[currentPage] | orderBy:columnToOrder:reverse">
                   <td>{{x.id}}</td>
                   <td>
                      <!-- editable username (text with validation) -->
                      <span editable-text="x.name" e-name="name" e-form="rowform" onbeforesave="checkName($data, x.id)" e-required>
                      {{ x.name || 'empty' }}
                      </span>
                   </td>
                   <td>
                      <!-- editable status (select-local) -->
                      <span editable-text="x.lName" e-name="lName" e-form="rowform">
                      {{ x.lName || 'empty' }}
                      </span>
                   </td>
                   <td>
                      <!-- editable group (select-remote) -->
                      <span editable-text="x.pages" e-name="pages" e-form="rowform" >
                      {{ x.pages || 'empty' }}
                      </span>
                   </td>
                   <td>
                      <span editable-text="x.passw1" e-name="passw1" e-form="rowform" >
                      {{x.passw1 || 'empty'}}
                      </span>
                   </td>
                   <td style="white-space: nowrap">
                      <!-- form -->
                      <form editable-form name="rowform"  ng-show="rowform.$visible" class="form-buttons form-inline">
                         <button type="submit" ng-disabled="rowform.$waiting" class="btn btn-primary">
                         save
                         </button>
                         <button type="button" ng-disabled="rowform.$waiting" ng-click="rowform.$cancel()" class="btn btn-default">
                         cancel
                         </button>
                      </form>
                      <div class="buttons" ng-show="!rowform.$visible">
                         <button class="btn btn-primary" ng-click="rowform.$show()">edit</button>
                         <button class="btn btn-danger" ng-click="removeUser($index)">del</button>
                      </div>
                   </td>
                </tr>
             </table>
             <button class="btn btn-default" ng-click="addUser()">Add row</button>
             <br>
             <ul class="pagination pagination-sm">
                <li ng-class="{active:0}"><a href="#" ng-click="firstPage()">First</a>
                </li>
                <li ng-repeat="n in range(ItemsByPage.length)"> <a href="#" ng-click="setPage()" ng-bind="n+1">1</a>
                </li>
                <li><a href="#" ng-click="lastPage()">Last</a>
                </li>
             </ul>
          </div>
    	    <a href="/view-feedbacks">View Records</a>
          <script>
             var app = angular.module("app", ["xeditable", "ngMockE2E"]);
             
              
              app.service('filteredListService', function () {
    			  this.searched = function (valLists,toSearch) {
            return _.filter(valLists, 
            function (i) {
                /* Search Text in all 3 fields */
                return searchUtil(i, toSearch);
            });        
        };
        
                 this.paged = function (valLists,pageSize)
                {
                    retVal = [];
                    for (var i = 0; i < valLists.length; i++) {
                        if (i % pageSize === 0) {
                            retVal[Math.floor(i / pageSize)] = [valLists[i]];
                        } else {
                            retVal[Math.floor(i / pageSize)].push(valLists[i]);
                        }
                    }
                    return retVal;
                };
             
             });
             
             app.run(function(editableOptions) {
              editableOptions.theme = 'bs3';
             });
             
             app.controller('Ctrl', function($scope, $filter, filteredListService) {
             $scope.users = [
             {id:1, name:'harry potter', lName:"Pege" ,passw1:"12/12/2012",pages:"556"},
             {id:2, name:'narnia',  lName:"Pim" ,passw1:"12/12/2012",pages:"557"},
             {id:3, name:'panchtantra',  lName:"Smith" ,passw1:"1/03/2009",pages:"556"},
             {id:4, name:'atlas', lName:"Jones" ,passw1:"2/04/1995",pages:"888"},
             {id:5, name:'science', lName:"Doe" ,passw1:"2/04/1995",pages:"888"},
             {id:6, name:'guiness book',lName:"Pan" ,passw1:"2/04/1995",pages:"888"},
    			  {id:7, name:'panchtantra1',  lName:"Smith" ,passw1:"1/03/2009",pages:"556"},
             {id:8, name:'atlas1', lName:"Jones" ,passw1:"2/04/1995",pages:"888"},
             {id:9, name:'science1', lName:"Doe" ,passw1:"2/04/1995",pages:"888"},
             {id:10, name:'guiness book1',lName:"Pan" ,passw1:"2/04/1995",pages:"888"},
             	];
             $scope.checkName = function(data, id) {
                if (id === 2 && data !== 'narnia') {
                  return "Username 2 should be `narnia(case sensitive)`";
                }
              };
             
              $scope.saveUser = function(data, id) {
                //$scope.user not updated yet
                angular.extend(data, {id: id});
                return $http.post('/saveUser', data);
              };
             
              // remove user
              $scope.removeUser = function(index) {
    			var index1 = index + $scope.currentPage * 4;
    			  $scope.users.splice(index1,1);
    			    $scope.pagination();   
    			   };
             
              // add user
              $scope.addUser = function($event) {
    			  $scope.currentPage = 2;
    			  $scope.id= $scope.users.length + 1
             $scope.users.push({
    			
                id:this.id,
                name:'Enter Book Name',
                lName:'Author Name',
    			 passw1:'Date of Publish',
    			  pages:'Pages'
    		
            });
    			    $scope.pagination(); 
    			  alert(users.id);
            $scope.resetAll();
        }
    
                
              //search
              $scope.pageSize = 4;
             
                $scope.allItems = $scope.users; 
                $scope.reverse = false;
             
                $scope.resetAll = function () {
                    $scope.filteredList = $scope.allItems;
                    $scope.newEmpId = '';
                    $scope.newName = '';
                    $scope.newEmail = '';
                    $scope.searchText = '';
                    $scope.currentPage = 0;
                    $scope.Header = ['','',''];
                }
             //pagination
            $scope.pagination = function () {
            $scope.ItemsByPage = filteredListService.paged( $scope.filteredList, $scope.pageSize );         
        };
    
        $scope.setPage = function () {
            $scope.currentPage = this.n;
        };
    
        $scope.firstPage = function () {
            $scope.currentPage = 0;
        };
    
        $scope.lastPage = function () {
            $scope.currentPage = $scope.ItemsByPage.length - 1;
        };
    
        $scope.range = function (input, total) {
            var ret = [];
            if (!total) {
                total = input;
                input = 0;
            }
            for (var i = input; i < total; i++) {
                if (i != 0 && i != total - 1) {
                    ret.push(i);
                }
            }
            return ret;
        };
       $scope.sort = function(sortBy){
            $scope.resetAll();  
           $scope.pagination();    
        };
        $scope.sort ('name');  
        
             
                $scope.search = function () {
            $scope.filteredList = 
           filteredListService.searched($scope.allItems, $scope.searchText);
            
            if ($scope.searchText == '') {
                $scope.filteredList = $scope.allItems;
            }
            $scope.pagination(); 
        }
    
                
                $scope.resetAll();       
             });
    		  
             function searchUtil(x,toSearch)
             {
                /* Search Text in all 3 fields */
                return ( x.name.toLowerCase().indexOf(toSearch.toLowerCase()) > -1 || x.lName.toLowerCase().indexOf(toSearch.toLowerCase()) > -1 || x.id == toSearch
                                        )                              
                                 ? true : false ;
             }
          </script>
       </body>
    </html>