2017-05-03 7 views
0

MEANスタックを使用してアプリケーションを構築するのが初めてで、mongodbコレクションに格納されたプログラムデータを照会するWebサイトを構築しようとしています。サーバーsider(express/node.js)のクライアント側(html/controller)データを取得する

<form class="navbar-form navbar-right" role="search"> 
    <div class="input-group"> 
    <input type="text" class="form-control" placeholder="Search" name="srch-term" id="srch-term" ng-model="keywords"> 
    <div class="input-group-btn"> 
     <button class="btn btn-default" type="submit"><i class="glyphicon glyphicon-search" ng-click="mongoQuery()"></i></button> 
    </div> 
</div> 
    </form> 

マイcontroller.jsファイルは、その後のような検索したキーワードに一致するすべてのMongoDBのコレクションを取得するには、サーバーへのコールを開始:

myApp.controller('AppCtrl', ['$scope', '$http', function($scope, $http) { 

    $scope.mongoQuery = function(){ 
    console.log($scope.keywords); 
    $http.get('/search_results', $scope.keywords); 
    } 
}]); 
私は検索バーを実装している私のhtmlインデックスファイル内の私は、(自分のタグフィールドを通して、またはそのカテゴリフィールドのいずれかを介して)キーワードに一致するすべてのレコードを取得しようと

は、次のような私のserver.jsファイル内の検索バーに入力された:

var express = require('express'); 
var app = express(); 
var mongojs = require('mongojs'); 
var db = mongojs('mydb', ['bbctest']); 
var bodyParser = require('body-parser'); 

app.use(express.static(__dirname + "/public")); 
app.use(bodyParser.json()); 

// THIS FUNCTION DOES NOT WORK 
app.get('/search_results', function(req, res){ 
    //console.log(req.body); 
    console.log("I recieved a GET request for searching keywords") 
    var searchKeywords = req.body.keywords; 
    console.log(searchKeywords); 
    db.bbctest.find({ $or: [ { categories:searchKeywords} , {tags:searchKeywords } ] }, { complete_title: 1 }).forEach(function(err, docs) { 
    console.log(docs); 
    res.json(docs); 
    }); 
}); 

app.listen(3000); 
console.log("Server running on port 3000"); 

私はコントローラから$ scope.keywordsという変数にアクセスしようとしていますが、その方法はわかりません。上記のように、req.body.keywordsを使用しようとしましたが、検索バーを使用すると空のオブジェクトが返されます。

私は助けていただきありがとうございます!また、そこに有用なリソースがある場合は、みんな私がそのようなアプリケーション(検索エンジン)を構築するのに役立つだろうことをお勧めしますが素晴らしいだろう!

ありがとうございました。 get要求と

答えて

0

使用クエリーparamは

$scope.mongoQuery = function(){ 
    console.log($scope.keywords); 
    $http.get('/search_results?keywords='+$scope.keywords); 

    //when using post request use like below 
    // $http.post('/search_result',{keywords:$scope.keywords}); 
    } 

app.useを追加paramsパラメータと値を送信する(bodyParser.urlencodedを({拡張:偽})); app.useの前(bodyParser.json());

var express = require('express'); 
var app = express(); 
var mongojs = require('mongojs'); 
var db = mongojs('mydb', ['bbctest']); 
var bodyParser = require('body-parser'); 

app.use(express.static(__dirname + "/public")); 

//add below line 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(bodyParser.json()); 


//when using post request -> change app.get to app.post 
app.get('/search_results', function(req, res){ 
    //console.log(req.body); 
    console.log("I recieved a GET request for searching keywords") 

    //var searchKeywords = req.body.keywords; //when using post request 

//accessing query parmas 
    var searchKeywords = req.query.keywords; 

    console.log(searchKeywords); 
    db.bbctest.find({ $or: [ { categories:searchKeywords} , {tags:searchKeywords } ] }, { complete_title: 1 }).forEach(function(err, docs) { 
    console.log(docs); 
    res.json(docs); 
    }); 
}); 

app.listen(3000); 
console.log("Server running on port 3000"); 
+0

私はそれを行っています。 controller.jsの "keywords"変数にアクセスするにはどうすればよいですか?それはまだ空のvarとして登場しています。 – sums22

+0

はい、ありがとうございました。私のmongodbクエリはまだ動作しません、私は間違って何を考えている? – sums22

+0

タグやカテゴリのようなキーワードを持つキーワードや結果と正確にマッチしたいのですか? @ sums22 –

関連する問題