【问题标题】:Retrieve client side (html/ controller) data in server sider (express/ node.js)在服务器端(express/node.js)中检索客户端(html/控制器)数据
【发布时间】:2017-05-03 17:38:45
【问题描述】:

我是使用 MEAN 堆栈构建应用程序的新手,我正在尝试构建一个查询存储在 mongodb 集合中的程序数据的网站。在我的 html 索引文件中,我实现了一个搜索栏:

  <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);
  }
}]);

然后,我尝试检索与在我的 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 但是当我使用搜索栏时返回一个空对象。

如果有任何帮助,我将不胜感激!此外,如果有任何有用的资源可供你们推荐,它们将帮助我构建这样一个很棒的应用程序(搜索引擎)!

非常感谢。

【问题讨论】:

    标签: angularjs node.js mongodb mongojs


    【解决方案1】:

    将查询参数与获取请求一起使用以发送参数和值

    $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(bodyParser.urlencoded({extended: false }));在 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");
    

    【讨论】:

    • 好的,我已经做到了。从 controller.js 访问“关键字”变量怎么样?它仍然以空变量的形式出现。
    • 是的,谢谢。但是,我的 mongodb 查询仍然无法正常工作,知道我做错了什么吗?
    • 您喜欢完全匹配关键字或具有类似关键字的标签和类别的结果? @sums22
    • 完全匹配单词。
    • 它似乎在我得到结果时有效,但是在我得到结果后我得到这个错误:/Users/ss/Documents/Back_End_Projects/node_modules/mongodb/lib/utils.js:123 process.nextTick(function() { throw err; });错误:发送后无法设置标头。
    猜你喜欢
    • 2012-11-29
    • 2016-05-21
    • 2015-10-21
    • 2016-06-17
    • 1970-01-01
    • 2015-09-29
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多