使用Bookshelf.js限制和偏移

时间:2015-05-20 21:50:27

标签: javascript node.js bookshelf.js

我使用下面的代码从表中获取所有结果:

Search.forge()
  .fetchAll()
  .then(function (collection) {
    res.json({error: false, data: collection.toJSON()});
  })

但是我需要分页,我认为我可以用限制和偏移来做,但到目前为止我还没有找到任何东西来提供限制和偏移选项。

这是可能的,还是我必须用Knex构建我的查询?

4 个答案:

答案 0 :(得分:8)

Knex查询构建器应该有所帮助,首先你必须调用collection.query(),以便书架进入knex查询构建器

  Models.forge()
            .query(function(qb) {
                //qb is knex query builder, use knex function here 
                qb.offset(0).limit(10);
            })
            .fetchAll().then(function(result) {
                res.json(result.toJSON());
            })

所以knex查询构建器功能 - > http://knexjs.org/#Builder现已免费提供

答案 1 :(得分:2)

这就是你如何使用Bookshelf的分页。考虑到你有一个Post模型,例如:

    Post.query(function (qb) {
            qb.orderBy('id', 'DESC');
            qb.limit(20);
    }).fetchAll()
      .then(function (collection) {

       })

但请注意,所有where子句必须出现在limit和orderBy子句之前。

答案 2 :(得分:1)

截至6/2018,尽管核心的Bookshelf.js仍不包含对分页的内置支持,但还有plugin to do exactly that。它使您可以根据需要以“ page / pageSize”或“ offset / limit”格式表示分页,而under the hood似乎利用了knex的内置偏移量和查询限制功能。代码示例:

Search.forge()
  .fetchPage({ offset: 30, limit: 10 })
  .then(function (collection) {
    res.json({error: false, data: collection.toJSON()});
  })

答案 3 :(得分:0)

到目前为止,没有bookhelf.js解决方案。使用knex查询构建器可以轻松实现。