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

我现在正在编写以下代码(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'
        }
    ]
}

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

我还有一个名为search.js的文件,它是以下文件:

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

最后,我还想听听您是否应该首先将数据库中的数据保存到任何文件中,然后通过打开和关闭该文件来使用它,还是应该在性能方面要求请求时直接连接到数据库?和安全性问题(数据库中的数据每天都会更新,因此无论如何我都必须运行脚本来自动重新创建提供的文件)。

谢谢。

最佳答案

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

  • 在您的Web服务器中有一条路由,您可以从中路由:GET /articles(您可以使用mongodb驱动程序collectionfind函数轻松实现该路由)
  • Angular Controller 上的
  • :

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

    至于第二个问题,您可以从服务器呈现列表,但是如果要更新列表,则无论如何都需要使用$http。此外,请注意, Angular 模板使用{{}},因此如果您不小心可能会覆盖它们-这就是为什么我认为这不是一个好习惯。
    但是,如果您要从Web服务器注入(inject)一些配置,则可以注入(inject)与此类似的代码(作为脚本):
    angular.module("myModule.configuration", []).constant('myConfiguration', {siteName:"http://www.my-site.com");
    

    然后可以将“myConfiguration”注入(inject)所有 Controller (别忘了将"myModule.configuration"添加到依赖项数组)

    关于javascript - 在AngularJS中使用数据库-我应该在哪里编写数据库连接代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19758213/

    10-12 14:07
    查看更多