将输入值发送到Express.js中的节点服务器

时间:2016-07-13 17:37:59

标签: node.js mongodb express mongoose routing

我正在尝试在Node.js网店项目中添加产品搜索功能。我正在使用MongoDB / mongoose的Express框架。我的想法是每当用户点击搜索图标(锚定HTML元素)时加载索引页面,并在我的router.get中获取数据库中标题匹配用户输入的所有产品。

有人可以告诉我如何将这些数据发送到服务器并从req中找回它吗?

来自 index.js的相关代码:

router.get('/', function(req, res, next) {
    Product.find({ title: new RegExp(req.data) }, function(err, docs){
        var chunks = []; //rows in HTML page
        var chunkSize = 3; //No. of elemens in each row

        for (var i = 0; i < docs.length; i += chunkSize) {
            chunks.push(docs.slice(i, i + chunkSize));
        }

        res.render('shop/index', { title: 'Shopping Cart', products : chunks });
    });
});

header.hbs的相关代码:

<ul class="nav navbar-nav navbar-right">
        <li>
          <form class="navbar-form navbar-left" role="search" id="search-input">
            <div class="form-group">
              <input type="text" class="form-control" placeholder="Search">
            </div>
            <a href="/" class="btn btn-default"><i class="fa fa-search" aria-hidden="true"></i></a>
          </form>
        </li>

有没有办法传递该输入的数据,比如这样的事情:

href ="/:search-input.val"

我知道这是胡说八道,但你应该得到我的目标...任何帮助都会非常感激,因为我几个小时都无法解决这个问题,也没有在这里找到答案。

[编辑] 所以,我在header.hbs中添加了一个jQuery处理程序,但即使Chrome控制台说XHR请求成功,它也什么也没做。任何想法?

$('#search-btn').click(function() {
        var title = $('#search-input').val();

        $.ajax({
          type : 'GET',
          url: '?title=' + title,
          data : title
        });
      });

1 个答案:

答案 0 :(得分:1)

在Express中,您可以从req.query对象的req属性访问GET数据。

req.query是一个对象,它包含传递到路由中的查询字符串的解析值(即/?field1=value)。查询字符串由?表示。查询字符串中的多个值通常用&

分隔
router.get('/', function(req, res, next) {
    var titles = req.query.titles

    Product.find({ title: new RegExp(titles) }, function(err, docs){
        var chunks = []; //rows in HTML page
        var chunkSize = 3; //No. of elemens in each row

        for (var i = 0; i < docs.length; i += chunkSize) {
            chunks.push(docs.slice(i, i + chunkSize));
        }

        res.render('shop/index', { title: 'Shopping Cart', products : chunks });
    });
});

你需要像这样构建你的AJAX调用

 $.ajax({
  type : 'GET',
  url: '/'
  data : {
    title: title    
  }
});

这应该产生GET /?title=foo请求。