web-dev-qa-db-ja.com

AngularJSでデータベースを使用する-DB接続コードはどこに書くべきですか?

私は現在、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というファイルが1つあります。これは次のファイルです。


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

最後に、パフォーマンスの観点から、最初にデータベースからファイルにデータを保存し、ファイルを開いて閉じることでそれを使用する必要があるのか​​、またはデータをフェッチする要求が来たときはいつでもデータベースに直接接続する必要があるのか​​についても聞きたいとセキュリティの問題(データベースのデータは毎日更新されるため、スクリプトを実行して、提供されたファイルを自動的に再作成する必要があります)。

ありがとう。

15
Blaszard

ベストプラクティスは、リストを取得できるhttpルートを用意することです。それが記事のリストであるとしましょう、そしてあなたは:

  1. あなたができるルートをあなたのウェブサーバーに持っています:GET /articles(mongodbドライバーcollectionfind関数を使用して簡単に実装できます)
  2. angularコントローラ:

(クライアントコード)

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

2番目の質問については、サーバーからリストをレンダリングできますが、リストを更新する場合は、$httpを使用する必要があります。さらに、angularテンプレートは{{}}を使用するので、注意しないとテンプレートを上書きする可能性があります。そのため、これは良い方法ではないと私は思います。ただし、 Webサーバーから挿入したい構成の場合、次のようなコードを(スクリプトとして)挿入できます。

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

次に、すべてのコントローラーに 'myConfiguration'を注入できます(依存関係配列に"myModule.configuration"を追加することを忘れないでください)

21
surui