15

我现在正在使用 Node.js、AngularJS 和 MySQL 或 MongoDB 构建一个 Web 应用程序。但是,当我尝试将 AngularJS 与包含从数据库中获取的数据集的控制器一起使用时,我想知道我应该在哪里编写代码......

我现在正在编写以下代码(search.ejs,不包括完整部分(例如html标签)):

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
<script src="/javascripts/searchController.js"></script>
<div ng-app class="row" ng-controller="searchCtrl">
<input ng-model="query">
<ul class="search">
<li ng-repeat="i in list" | filter:query">
<a href="{{i.url}}">{{i.name}}</a>
</li>
</ul>
</div>

我想list从数据库中获取数据并使用它。所以这里的searchController.js文件:

function searchCtrl($scope){
    $scope.list = [
        {
            'name': 'Michael',
            'url': 'mic'
        },
        {

            'name': 'Bob',
            'url': 'bob'
        }
    ]
}

但是,我想要做的不是手动写出$scope.list变量中的数据,而是使用 MySQL 或 MongoDB 数据库中的数据。(而 MySQL 是我的首选语言,但我认为 MongoDB 在这种情况下似乎更好。)那么我怎样才能连接到 DB?

我还有一个名为search.js的文件,如下所示:


exports.index = function(req, res) {
    res.render("search", {
    }, function(err, res){
        res.render("index", {
            content: res
        });
    });
}

最后,我也想听听您是否应该首先将数据从数据库保存到任何文件并通过打开和关闭文件来使用它,或者我应该在请求获取数据时直接连接到数据库,在性能方面和安全问题,(数据库中的数据每天都会更新,所以我必须运行一个脚本来自动重新创建服务文件)。

谢谢。

4

1 回答 1

21

我相信最好的做法是有一个可以从中获取列表的 http 路由。假设它是一个文章列表,那么你:

  1. 在您的 Web 服务器中有一条路由,您可以从中:(您可以使用 mongodb 驱动程序和函数GET /articles轻松实现它)collectionfind
  2. 在您的角度控制器上:

(客户端代码)

function searchCtrl($scope, $http){
    $http.get("/articles").success(function(articles, status, headers, config) {
          $scope.articles = articles
    }
}

至于您的第二个问题,您可以从服务器呈现列表,但是如果您想更新列表,则$http无论如何都需要使用。此外,请注意角度模板使用{{}},因此如果您不小心,可能会覆盖它们 - 这就是为什么我认为这不是一个好习惯。但是,如果您有一些想要从 Web 服务器注入的配置,那么您可以注入与此类似的代码(作为脚本):

angular.module("myModule.configuration", []).constant('myConfiguration', {siteName:"http://www.my-site.com");

然后您可以将“myConfiguration”注入所有控制器(不要忘记添加"myModule.configuration"到依赖项数组)

于 2013-11-20T20:14:07.733 回答