2017-01-16 105 views
0

我正嘗試使用貓鼬查詢爲頁面分頁。但是獲取錯誤無法在發送之後設置標題。如果沒有分頁使用,排序工作正常。獲取錯誤 - 發送後無法設置標題

哪裏是我的錯誤。這個錯誤是什麼意思?我下面

代碼app.js

var options = { 
    perPage:3, 
    delta : 1, 
    page:5 

}; 
app.get("/api/Productlist",function(req,res){ 
    var query = ProductModel.find(function(err,items,count){ 
     if(err){ 
      var empty = {} 
      res.send(JSON.stringify(empty)); 
      console.log("cannot finf data"); 
     }else{ 
     res.send(JSON.stringify(items)); 
       }   
}).sort({"name":1}) 
    .paginate(options,function(err,items){ 
     if(err){ 
      console.log("Cant paginate"); 
     } 
     console.log(items); 
    }); 

回答

0

此代碼工作正常,它一次只查詢2條記錄,但我想在頁面上顯示我的html頁面上的記錄。如何使用此查詢綁定html正文。

ProductModel.find().paginate(2,2). 
     exec(function(error,item){ 
      if(error){ 
       console.log("Error"); 
      }else{ 

       console.log(item); 
       res.send(JSON.stringify(item)); 
      } 
    }); 
0

幾件事情:

1)你可以寫res.json代替res.send的(JSON.stringify(對象));

2)在您的數據庫查詢中,您的分頁完成前立即調用該函數併發送響應。我發現如果你不打算讓你的應用程序的規模很大,你可以使用跳過和限制,這裏是一個例子,希望它有幫助。

yourModel.find().sort({name:1}).skip(0).limit(3).then(data=>{ 
    if(data.length === 0){ 
    let err = new Error(); 
    err.message = "cannot find data"; 
    err.status = 404; 
    res.status(err.status).json(err); 
    } 
    res.json(data); 
}); 

3)如果你想保持目前的結構,這裏有一個例子,你需要調用你的函數只有一次,就是這樣,沒有必要找,然後再分頁

ProductModel.find().sort({name:1}).paginate(yourOptions,function(err,items){ 
    console.log(items) 
}) 
+0

感謝您的回覆。我使用了你的選項3.但它顯示錯誤ProductModel.find()。sort({name:1})。paginate ...不是函數。我的代碼是app.get(「/ api/Productlist」,功能(req,res)ProductModel.find()。sort({name:1})。paginate(options,function(err,items){if(err){ \t console.log(「can not find data 「);} 否則{ \t res.send(JSON.stringify(項));} \t}); \t}); – chitra

相關問題