2013-11-03 13 views
14

Ich baue jetzt eine Web-App mit Node.js, AngularJS und entweder MySQL oder MongoDB. Allerdings, wenn ich versuchte, AngularJS mit einem Controller zu verwenden, die Datensätze aus der Datenbank geholt enthält, frage ich mich, wo ich sollte den Code schreiben in ...Datenbank in AngularJS verwenden - wo sollte ich DB-Verbindungscode schreiben?

ich jetzt in den folgenden Code (search.ejs schreiben, ohne Voll Teil (wie html-Tag)):

<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> 

und ich möchte in list von Daten in der Datenbank holen und nutzen. Also hier ist searchController.js Datei:

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

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

Aber was ich tun möchte, ist anstelle des Schreibens von Daten in der $scope.list Variable manuell, Daten in Datenbank entweder MySQL oder MongoDB. (Und MySQL ist meine bevorzugte Sprache, aber MongoDB scheint in diesem Fall besser zu sein, denke ich.) Wie kann ich also eine Verbindung zur DB herstellen?

Ich habe auch eine Datei mit dem Namen search.js, die denjenigen finden:


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

Und schließlich mag ich auch von Ihnen hören, ob ich ersten Daten aus der Datenbank zu beliebiger Datei speichern soll und es verwenden, um Öffnen und Schließen der Datei, oder ich sollte direkt mit der Datenbank verbinden, wann immer die Anfrage Daten abholen soll, in Bezug auf Leistung und Sicherheitsprobleme (die Daten in der Datenbank würden jeden Tag aktualisiert werden, also muss ich ein Skript ausführen, um automatisch neu zu erstellen die servierte Datei sowieso).

Danke.

+0

Ich beantwortete Ihre erste Frage, aber für die zweite habe ich nicht verstanden, was ist die Datei, die Sie öffnen müssen. –

+0

Danke. Was ich in "Speichern in eine Datei" meinte, ist wie folgt: 1) Daten von der DB holen und ihr Ergebnis in einer Datei speichern. 2) Laden Sie die gespeicherte Datei in 'searchController.js' und ordnen Sie deren Inhalt dem Wert der Variable' $ scope.list' zu.3) Schließlich, Zugriff auf die Variable aus der 'search.ejs' Datei. – Blaszard

Antwort

19

Ich glaube, die beste Praxis ist eine HTTP-Route, aus der Sie die Liste abrufen können. Nehmen wir an, es sich um eine Liste von Artikeln ist, dann Sie:

  1. eine Route in Ihrem Web-Server, von dem Sie könnte: GET /articles
  2. auf Ihrem Winkel (Sie leicht mongodb Treiber collection & find Funktionen implementieren könnte) Controller:

(Kundennummer)

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

wie für yo Bei der zweiten Frage könnten Sie die Liste vom Server rendern, aber wenn Sie die Liste aktualisieren möchten, müssen Sie unabhängig davon $http verwenden. Beachten Sie außerdem, dass eckige Vorlagen {{}} verwenden, sodass Sie sie möglicherweise überschreiben können, wenn Sie nicht vorsichtig sind - deshalb denke ich, dass es keine gute Übung ist.

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

und dann könnte man ‚myConfiguration‘ an alle injiziert: wenn Sie jedoch eine Konfiguration, die Sie von Ihrem Webserver injizieren wollen haben, dann könnte man einen Code ähnlich wie diesen (als Skript) injiziert Ihre Controller (vergessen Sie nicht "myModule.configuration" zu den Abhängigkeiten Array hinzuzufügen)

+0

Danke. Jetzt funktioniert alles gut. Nach mehr als zwei Wochen seit meinem ursprünglichen Beitrag und keiner einzigen Antwort darauf, war ich schon kurz davor, aufzugeben. Definitiv möchte ich mehr als 1 upvote ... Vielen Dank. – Blaszard

Verwandte Themen