2017-05-03 5 views
0

평균 스택을 사용하여 애플리케이션을 작성하는 데 익숙하며 mongodb 컬렉션에 저장된 프로그램 데이터를 쿼리하는 웹 사이트를 구축하려고합니다.서버 sider (express/node.js)의 클라이언트 측 (html/컨트롤러) 데이터 검색

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

    $scope.mongoQuery = function(){ 
    console.log($scope.keywords); 
    $http.get('/search_results', $scope.keywords); 
    } 
}]); 
:

<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의 컬렉션을 얻기 위해 서버로 호출을 시작 : 내 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을 ({확장 : 거짓})); before 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 –