Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 离子型4+;带无限滚动的分页rest api搜索过滤器_Node.js_Angular_Ionic Framework_Ionic4_Infinite Scroll - Fatal编程技术网

Node.js 离子型4+;带无限滚动的分页rest api搜索过滤器

Node.js 离子型4+;带无限滚动的分页rest api搜索过滤器,node.js,angular,ionic-framework,ionic4,infinite-scroll,Node.js,Angular,Ionic Framework,Ionic4,Infinite Scroll,我用的是离子5.4.5。RestApi是使用node和express js创建的。 当我想搜索时,应用程序只是在第一页上查找数据。我希望应用程序搜索所有数据。我如何才能做到这一点 我们的api已分页。 app.get("/units", (req, res) => { let page = parseInt(req.query.page) let limit = parseInt(req.query.limit) if(!page && !limit){

我用的是离子5.4.5。RestApi是使用node和express js创建的。 当我想搜索时,应用程序只是在第一页上查找数据。我希望应用程序搜索所有数据。我如何才能做到这一点

我们的api已分页。

app.get("/units", (req, res) => {
   let page = parseInt(req.query.page)
   let limit = parseInt(req.query.limit)

   if(!page && !limit){
      page = 1;
      limit = 5;
   }

   let startIndex = (page -1) * limit
   let endIndex = page * limit

   let results = {} 
   if(endIndex < data.length){
   results.next = {
      page : page + 1,
      limit : limit
   }
   }

   if(startIndex > 0){
   results.previous = {
      page : page - 1,
      limit : limit
   }
}

   results.results = data.slice(startIndex,endIndex)
   res.json(results);
});

app.get("/units/:id", (req, res) => {
   const itemId = req.params.id;
   const item = data.find(_item => _item.id == itemId);

   if (item) {
      res.json(item);
   } else {
      res.json({ message: `item ${itemId} doesn't exist`})
   }
});

我还使用服务从API获取数据。

从API返回所有数据,并在应用程序上执行筛选和分页。或者在API中执行筛选和分页(按该顺序)

如果有很多数据行,最后一个选项可能更好,因为:

  • 将所有行发送到应用程序将使用大量数据并花费大量时间,尤其是通过WiFi或移动数据连接
  • 服务器上的处理通常比客户端上的处理快,尤其是在移动设备上

您可能还需要返回API中的总行数。

我们的API已分页。我还创建了显示所有数据的路径。当我从分页链接发出请求时,它只是第一页的搜索。当我提取所有数据时,它不会搜索。我写的代码不是可以做到这一点吗?您需要使API支持搜索所有数据。除非你像@rveerd所说的那样获取所有数据,否则你不能在客户端进行。您可以检查:@ucnumara您的API只返回一个页面。你的应用程序只能过滤这些结果。您需要将筛选器(
val
)发送给API。您可以使用。首先过滤所有数据,然后在API中执行分页。将结果返回到应用程序。
 getItems(ev) {
   let val = ev.target.value;

   if (val == '') {
   this.loadUnit();
   return;
   }
    if (val && val.trim() != '') {
      this.unit = this.unit.filter((un,name) => {
        return (un.name.toLocaleLowerCase().indexOf(val.toLocaleLowerCase()) > -1);
      })
    } 
 }