2013-11-03 19 views
14

Şimdi Node.js, AngularJS ve MySQL veya MongoDB kullanarak bir web uygulaması yapıyorum. Ancak, veritabanından alınan veri kümelerini içeren bir denetleyiciyle AngularJS kullanmayı denediğimde, kodu nereden yazacağımı merak ediyorum ...AngularJS'de veritabanını kullanma - DB bağlantı kodunu nereye yazmalıyım?

Şimdi şu kodda yazıyorum (search.ejs, dahil değil) tam porsiyon (örneğin html etiketi)):

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

ve veritabanından list verileri alıp kullanmak istiyorum.

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

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

Ancak, ne yapmak istediğinizi yerine MySQL veya MongoDB ya veritabanında elle kullanım verilerini $scope.list değişkendeki verileri yazma geçerli: Yani burada searchController.js dosya. (Ve MySQL benim tercih ettiğim dildir, ama MongoDB bu durumda daha iyi görünüyor, bence.) Peki, DB'ye nasıl bağlanabilirim?


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

Ve nihayet, Ben de ilk herhangi bir dosyaya veritabanından veri kaydetmek ve bunu kullanması gerekip gerekmediğini sizden duymak istiyorum:

Ben de bir dosya bir şudur ki, search.js çağrıda Dosyayı açıp kapamak, ya da istek veri almak için istek geldiğinde veritabanına doğrudan bağlanmalı, performans ve güvenlik sorunları açısından, (veritabanındaki veriler her gün güncellenir, bu yüzden otomatik olarak yeniden oluşturmak için bir komut dosyası çalıştırmam gerekir) zaten sunulan dosya).

Teşekkürler.

+0

İlk sorunuzu yanıtladım, ancak ikincisi için açmanız gereken dosyanın ne olduğunu anlamadım. –

+0

Teşekkürler. Bir dosyaya kaydederken kastettiğim şey şu şekildedir: 1) veriyi DB'den al ve sonucunu bir dosyaya kaydet. 2) Kaydedilen dosyayı 'searchController.js' içine yükleyin ve içeriğini' $ scope.list' değişkeninin değerine eşleyin.3) Son olarak, değişkene 'search.ejs' dosyasından erişin. – Blaszard

cevap

19

En iyi uygulamanın, listeyi alabileceğiniz bir http yoluna sahip olmak olduğuna inanıyorum. senin açısal üzerinde GET /articles (kolayca mongodb sürücü collection & find işlevlerini kullanarak uygulamak olabilir)

  • :
    1. sen hangi adresinin web sunucusu bir yol olması: o zaman, en çok makalelerin bir listesi varsayalım kontrol: yo olarak

    (müşteri kodu)

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

    İkinci soru, listeyi sunucudan oluşturabilirsiniz, ancak listeyi güncellemek isterseniz, $http'u kullanmanız gerekir. dahası, açısal şablonların {{}}'u kullandığına dikkat edin, böylece dikkatli değilseniz bunları geçersiz kılabilirsiniz - bu yüzden iyi bir uygulama olmadığını düşünüyorum.

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

    ve sonra herkese 'myConfiguration' enjekte edebilir: Ancak, web sunucusundan enjekte etmek isteyen bazı yapılandırma vardı , o zaman (komut dosyası gibi) buna benzer bir kod enjekte edebilir denetleyicileriniz (bağımlılık dizisine "myModule.configuration"'u eklemeyi unutmayın)

  • +0

    Teşekkürler. Şimdi her şey iyi çalışıyor. Orijinal gönderimden bu yana geçen iki haftadan fazla bir süre geçtikten ve bundan sonra tek bir cevap vermemden dolayı, onu vermek için çok yakındım. Kesinlikle 1'den fazla yükseltmek istiyorum ... Çok teşekkürler. – Blaszard

    İlgili konular