我正在尝试在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
});
});
答案 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
请求。