2014-03-18 40 views
0

我目前有一个约4000文件的集合。我希望能够对结果进行分页,以便用户一次只能查看100个结果。Mongo/Mongoose分页HTML困惑

我非常明白到当搜索提交服务器端做:

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 &#8594;</a></p> 
      </div> 
     </div> 
    </section> 
    </div> 
</div> 

//footer here 

感谢您的帮助!我对此很感兴趣,并且非常感谢。

回答

0

有几件事情,我建议:

  1. 使用app.get()而不是app.post()。您正在从服务器检索信息,并且app.get()方法表示HTTP GET,这反过来代表检索。您所知道的app.post()方法表示一个HTTP POST,它应该用于向服务器添加信息。
  2. 一旦您使用app.get(),您可以将客户端页面表示为指向/ browse /的简单链接:page
  3. 请注意页面为0,page = last的边缘情况。没有以前的页面时,您可能不想显示与之前的链接。
  4. 跳过大量文档时,使用skip()会导致性能损失。只是要记住。

服务器:

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> 

希望有所帮助。