2016-04-30 33 views
0

Mongoデータベースにクエリを行い、DOMにレンダリングできるように指定された条件に一致するすべてのアイテムを返す必要があるアプリがあります。私はすべての情報が正しく格納されていることを確認したので、郵便配達員と私のアプリを通してローカルにデータベースをテストしました。私の問題は、私は完全にクエリが私のアプリ内で行われるべきであるか分からないということです。MongoDB with Angular App

ユーザはドロップダウンを使用してビジネスのタイプを指定します。これが完了すると、このタイプに一致するすべてのビジネスがDOMに入力されます。私の工場で

angular.module('UserCtrl', []) 

.controller('UserSelectController', function($scope, queryFactory) { 
    //list out all of our specialty types of food in the below array -- this will populate in our dropdown selection for our user_BusDirectory.html view 
    $scope.listOfTypes = ['Type 1', 'Type 2', 'Type 3', 'Type 4', 'Type 5', 'Type 6', 'Type 7', 'Type 8']; 
    //invoke function to call a GET request to get business with that type of specialty 
    $scope.getBusiness = function(){ 

    console.log('You selected: ', $scope.selectedType); 
    queryFactory.queryType($scope.selectedType); 

    }; 
}); 

次常駐:

これは、ユーザーのコントローラである:私はMongoデータベースbusinesses

angular.module('queryService', []) 

.factory('queryFactory', function($http){ 

    var queryType = function(type){ 
    console.log('What is the type that has been passed in: ',type) 
    var query = businesses.find({specialty: type}).exec(function(err, businessMatches){ 
     if(err){ 
     console.log(err); 
     return res.send({ errorMessage : err}) 
     }else{ 
     res.json(businessMatches); 
     } 
    }); 
    console.log("Did query recieve all the types? :", query); 
    } 
    return { 
    queryType: queryType 
    } 
}); 

が名れる以下は、私がこれまで持っているコードです。私が照会したいコレクション。私は私のアプローチが間違っていると信じられるようになる関数をテストしようとするとReferenceError: businesses is not definedを得続けます。

答えて

1

私はしばらくお待ちしており、あなたの構造がどのように見えるかを考えました。 サーバー上のあなたのAPIハンドラは次のようになります。

angular.module('queryService', []) 
.factory('queryFactory', function($http){ 
    var getBusinesses = function(type) { 
    return $http({ 
     method: 'GET', 
     url: 'api/businesses?type=' + type 
    }) 
    }; 

    return { 
    getBusinesses: getBusinesses 
    } 
}); 

とコントローラは、後のデータで何かをすることがあります。

app.get('api/businesses', function(req, res) { 
    Businesses.find({specialty: req.query.type}) 
    .then(function(businesses){ 
    res.json(businesses); 
    }) 
    .catch(function(error){ 
    console.log("There was error retrieving businesses" + error); 
    }); 
}); 

とフロントには、HTTP呼び出しがどのように見えるべきで作る工場を終了します応答は戻ってくる:

angular.module('UserCtrl', []) 

.controller('UserSelectController', function($scope, queryFactory) { 
    $scope.listOfTypes = ['Type 1', 'Type 2', 'Type 3', 'Type 4', 'Type 5', 'Type 6', 'Type 7', 'Type 8']; 

    $scope.getBusiness = function(){ 
    queryFactory.getBusinesses($scope.selectedType) 
    .then(function(response){ 
    // do something with response.data 
    // put it on $scope.businesses 
    }); 
    }; 
}); 
+1

APIハンドラに「getCompanies」が必要ですか?私は通常、私はそこに匿名の機能しか見ないので尋ねる。 – DLF85

+0

私はこの質問を読んだとき、 '企業'、 'getCompanies'などの関連性は見当たりませんし、' api/companies?type = ''というエンドポイントは間違っています! – davidkonrad

+0

DLF85、そうです、そこには機能がないはずです。私は後でルートを追加し、それを忘れてしまいました。私はまた、あなたのコードに合うように、「企業」を「企業」に改名しました。 – MaxKroshka

0

'事業'は割り当てられていないため、未定義です。あなたのコードには、データを取得するサーバ呼び出しがありません。次のものが必要です。

  1. データ
  2. を取得するためのREST呼び出しは、エンドポイントが必要なデータだけを返すようにサーバー呼び出しで「タイプ」を渡して提案します。
  3. queryTypeは、データが返されたときに解決される約束($ q)を返さなければなりません。
+0

私の誤解は、私が自分のデータベースに直接アクセスできると思ったからだと思う。私は今サーバにGET要求を作成し、返されたものだけがその型に合ったものであるように条件を作りました。どういうわけか私はこれを「長い」方法でやったように感じています。そして、私はモンゴースを正しく利用していません。私はまだ私のGET要求から返送されたデータのレンダリングに問題があります。 – DLF85

+0

あなたはモンゴースを正しく使っているようです。 MongoDBとのサーバーサイドの対話を簡素化します。だから私たちがあなたが問題を解決するのを手助けするために、例から返されたjsonをつかみ、plunkerまたはcodepenでレンダリングの問題の例を作ります。 –