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 に接続できますか?

という名前のファイルも 1 つあります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サーバーに次のルートがあります:GET /articles(mongodbドライバーcollectionfind関数を使用して簡単に実装できます)
  2. 角度コントローラーで:

(クライアントコード)

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"依存関係配列に追加することを忘れないでください)

于 2013-11-20T20:14:07.733 に答える