Sails.Js - 我如何在sails.Js 中进行分页

Posted

技术标签:

【中文标题】Sails.Js - 我如何在sails.Js 中进行分页【英文标题】:Sails.Js - How I do pagination in sails.Js 【发布时间】:2014-12-26 04:51:49 【问题描述】:

我想使用sails.js、mongodb 和waterline-ORM 创建分页表。

sails.js 中是否有特定的分页方式?

【问题讨论】:

【参考方案1】:

http://sailsjs.org/#/documentation/concepts/ORM/Querylanguage.html

Model.find().paginate(page: 2, limit: 10);

Model.find( where:  name: 'foo' , limit: 10, skip: 10 );

如果您希望分页异步工作,使用 JQUERY $$.getJSON 和服务器上的 res.json(); 非常容易

水线和船帆文档中有很多信息。

【讨论】:

我写了一些蓝图来帮助分页github.com/randallmeeker/SailsBluePrintActions/tree/master/… 我们如何在同一个查询中获得总数?因为我想告诉我的视图是否应该显示“下一个按钮”,并放置“页面”碎屑(如 1、2、3、4、5) @Meeker 干得好。也请将此添加为答案。这对我很有帮助。【参考方案2】:

还有另一种方式。

如果你想从前端获取数据,并且已经开启了蓝图,你也可以试试: http://yourDomain.com/ModelName?skip=10&limit=10

参考: 1.官网:http://sailsjs.org/#/documentation/reference/blueprint-api/Find.html

【讨论】:

太棒了...但是为了在前面生成一个功能性分页器,我需要将初始值传递给我的(角度)应用程序...我的意思是初始值:项目总数和 items_per_page (如果没有指定,它应该是蓝图中的默认页面)......获取这些的正确模式是什么?【参考方案3】:

您可以使用内置的 skiplimit 查询参数构建一个功能性分页器,用于蓝图路由:

/api/todos?skip=10&limit=10

使用此选项,您可以根据各种设备大小动态调整页面大小 - 您可以使用 limit 提供此选项,这基本上就是您的页面大小。将(页面大小 - 1)乘以当前页码 - 瞧,你已经得到了 skip 参数。

至于如何获取所有项目的数量,我还没有找到内置的方法,所以我写了一个小助手中间件(https://github.com/xtrinch/sails-pagination-middleware)来返回响应中的总数JSON 这种方式:


    "results": [
        
            /* result here */
        ,
        
            /* another result here */
        
    ],
    "totalCount": 80

您需要做的就是通过 npm 安装中间件并将其添加到 http.js 中的中间件中。

如果您需要一个功能齐全的示例,我还在 github 上提供了一个具有这种分页功能的示例待办事项应用程序:https://github.com/xtrinch/vue-sails-todo。它是用 vue 编写的,但无论哪种情况你都应该明白。

请注意,此答案需要sails 1.x。

【讨论】:

这在返回总数方面非常出色。我看看你是怎么做到的。理想情况下,我想在同一个查询中获取 totalCount,而不必执行另一个查询来获取总数。【参考方案4】:

我想你也可以用 io 做到这一点:

io.socket.get('/thing', limit: 30, skip: 30*pageNum, function(things, jwr)  /*...*/ )

【讨论】:

以上是关于Sails.Js - 我如何在sails.Js 中进行分页的主要内容,如果未能解决你的问题,请参考以下文章

如何在sails.js 中启用http/2

Sails js:如何在 Sails js 的单个模型中定义两个 MySQL 连接到两个不同的数据库?

如何在sails.js 中创建动态策略

Sails.js:用户注册后如何使用sails-generate-auth返回访问令牌?

如何在 Sails.js 中实现连接多方

如何将凉亭组件与sails.js 连接?