天天看點

node背景處理分頁邏輯 資料庫基于mongodb

問題

問題1:當點選搜尋之後,分頁功能就會失效,不能點選,不能點選跳轉到指定頁碼;

問題2:在分頁邏輯處理完之後,會有一個上一頁和下一頁的處理邏輯,要設定頁碼限制。

問題3:打開該頁面會有第一次渲染頁面效果,頁碼會顯示所有資料的分頁,但你點選搜尋之後,渲染的是你檢測到的資料的分頁;

解決思路及相關重要步驟:

1.設計背景資料庫的語句-查詢sql的封裝

// 根據條件基礎查詢
 //where是查詢的條件,column是查詢之後要求忽略的字段
    find(col,where={},column={}){
        return new Promise((resolve,reject)=>{
            col.find(where,column,(err,data)=>{
                if(err) reject(err);
                resolve(data);
            })
        })
    },
           

2.分頁sql語句的封裝

//col表示查詢的集合,where是根據查詢的條件,column忽略的顯示字段,num一頁顯示多少資料,index是從什麼索引開始進行查詢
 page(col,where={},column={},num,index){
        return new Promise((resolve,reject)=>{
            col.find(where,column).limit(num).skip(index*num).exec((err,data)=>{
                if(err) reject(err);
                resolve(data);
            })
        })
    },
           

3.查詢總資料條數

// 查詢資料的個數
    count(col,column={}){
        return new Promise((resolve,reject)=>{
            col.countDocuments(column).exec((err,data)=>{
                if(err) reject(err);
                resolve(data);
            })
        })
    },
           

js代碼塊的設計

1.分頁首先要知道資料的總數量以及總頁數,調用count方法得到總條數total,設定一個全局變量let num=5,表示每頁顯示五條資料,let index=0表示從索引為0的開始,計算得知總條數為total/num。

node背景處理分頁邏輯 資料庫基于mongodb

2.在這裡要特别注意的是,分為兩種情況,一種是沒有搜尋的分頁,一種是帶有搜尋的分頁,是以在進行分頁路由處理時,我們要進行不同的傳參,在計算count有一個參數為查詢的條件,我們在剛開始時聲明一個全局變量str="",當有查詢功能時,講查詢的條件傳給全局變量,即 處理查詢時str=req.body.search可以在進行分頁處理拿到全局變量,這個時候将該變量處理後作為count方法的第二個參數,得到的結果就是查詢之後的資料

router.get('/page',function(req,res,next){
  let{index=0,num=5}=req.query;
  index=Number(index);
  let reg=new RegExp(str);
  // 前端頁面上過來的可能是個字元
  let where=str===""?{}:{userName:reg};
  sql.page(user,where,{_d:0,__v:0},num-0,index*1).then(data=>{
    sql.count(user,where).then(total=>{
      res.render('users',{
        index:2,
        data:data,
        power:req.session.power,
        maxPage:Math.ceil(total/num),
        num,
        pageIndex:index,
      })
    })

  })
})
           

3.在進行頁面渲染的時候每一個渲染的帶有路由處理,a标簽後攜帶路由跳轉以及要跳轉的頁碼數,将這個帶到路由進行處理。

node背景處理分頁邏輯 資料庫基于mongodb

4.到此分頁的主要邏輯已經分析完畢,接下來分析一下上一頁和下一頁的邊界限定

我使用了三目表達式處理,當點選的索引為0這個時候它的上一頁應該還是0,不能繼續減減

<li><a href="/users/page?index=<%pageIndex===0?0:pageIndex-1%>&num=5" target="_blank" rel="external nofollow" >«</a></li>
           

當點選的是最後一頁,為最大頁碼數-1,當點選最後一頁時,不應該将它繼續加加,應該讓他始終在目前頁上

<li><a href="/users/page?index=<%=pageIndex===maxPage-1?maxPage-1:pageIndex+1%>&num=5" target="_blank" rel="external nofollow" >»</a></li>
           

展示頁面效果

目前為沒有進行搜尋的頁面

node背景處理分頁邏輯 資料庫基于mongodb

搜尋條件為1,展示結果為

node背景處理分頁邏輯 資料庫基于mongodb
node背景處理分頁邏輯 資料庫基于mongodb