我目前有一个包含大约4,000个文档的集合。我希望能够对结果进行分页,以便用户一次只能查看100个结果。
我非常了解在提交搜索时在服务器端要做什么:
app.post('/browse/:page', function(req, res) {
var page = parseInt(req.params.page);
data = {};
data.page = page;
data.nextpage = page + 1;
data.prevpage = page - 1;
var filterOptions = _.transform(req.body, function(result, value, key) {
result[key] = new RegExp(value.replace(/[^A-Za-z 0-9!'-]/g,''), "i");
});
Model.find(filterOptions).sort('brand').skip((page-1)*100).limit(100).exec(function(err, results) {
//do stuff here with results
res.render('browse.ejs', data);
})
})
});
现在,在我的视图页面上,这就是我所拥有的以及我认为我在做错的事情:
//header here
<div class="wrapper row2">
<div id="container" class="clear">
<section>
<div id="browse-wrap">
<div id="browse-left_col">
<h3>Browse by:</h3><br>
<form action="browse/1" method="post">
//form inputs and such here
<input type="submit" class="button" value="Browse">
</form>
</div>
<div id="browse-right_col">
//table of results here
<p style="text-align:right;"><a href="#" onclick="document.forms[0].attr('action', 'browse/<%=nextpage%>').submit();return false;">Next 100 →</a></p>
</div>
</div>
</section>
</div>
</div>
//footer here
感谢您的帮助!我真的很擅长并欣赏它。
答案 0 :(得分:0)
有一些我建议的事情:
服务器:
app.get('/browse/:page', function(req, res) {
...
Model.find().sort('brand').skip((page-1)*100).limit(100).exec(function(err, results) {
res.render('browse.ejs', {data:data, results:results});
});
})
客户端(在您的示例中使用ejs):
// list data
<ul>
<% for(var i=0; i<results.length; i++) {%>
<li><%= results[i]._id %></li>
<% } %>
</ul>
// show prev/next page links
<a href="/browse/<%= data.prevPage%>">previous</a>
<a href="/browse/<%= data.nextPage%>">next</a>
希望有所帮助。