【问题标题】:AngularJS app connectivity with Mongodb using NodeJSAngularJS 应用程序使用 NodeJS 与 Mongodb 连接
【发布时间】:2018-01-02 21:54:23
【问题描述】:

这是我的AngularJS 应用程序。它工作正常并使用ng-repeat 从控制器中的数组中获取数据,但现在我想使用NodeJS 将它与Mongodb 连接,以便它从Mongodb 集合中获取数据。此外,当我编辑、更新或删除任何行时,它应该反映在 Mongodb 中。

我的AngularJSindex.html

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;
}
    <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="https://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="https://vitalets.github.io/angular-xeditable/dist/js/xeditable.js"></script>
          <link rel="stylesheet" type="text/css" href="https://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="https://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>
       </body>
    </html>

【问题讨论】:

    标签: angularjs node.js mongodb


    【解决方案1】:

    你可以尝试学习nodejsmongodb

    【讨论】:

    • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
    • @RenéVogt 是的,但问题是我们不能全部提供 mongodb 和 nodejs 代码,我们可以指导他们吗?
    猜你喜欢
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 2014-11-05
    相关资源
    最近更新 更多