项目作者: xtrinch

项目描述 :
Sails 1.x pagination middleware or hook returning total count in a transformed JSON response
高级语言: JavaScript
项目地址: git://github.com/xtrinch/sails-pagination-middleware.git
创建时间: 2018-08-31T08:28:11Z
项目社区:https://github.com/xtrinch/sails-pagination-middleware

开源协议:MIT License

下载


npm version
npm

sails-pagination-middleware

About

Middleware for sails.js for finding the total count by criteria, via a Django rest framework inspired transformed request.

Criteria pagination / filtering is built in to Sails, with keywords limit, skip, where. This package only adds a totalCount field to aid with building page indicators. You could define your page size in your frontend application with the keyword limit and just adjust skip accordingly. Meaning you could implement all sorts of different pagination indicators with this system.

Example of the transformed request to /api/todos?skip=10&limit=10&where={"title":{"contains":"test"}}:

  1. {
  2. "results": [{
  3. /* results here */
  4. }],
  5. "totalCount": 80
  6. }

Package follows the Sails initiative ‘convention over configuration’, so installing the middleware assumes, you would like to transform requests at all index endpoints. See section advanced usage for other options.

Use case example

Check out an use case example over at vue-sails-todo.

Basic Usage

  1. npm install --save sails-pagination-middleware

Then in your config/http.js, add paginate to first place in array:

  1. middleware: {
  2. paginate: require('sails-pagination-middleware'),
  3. order: [
  4. 'paginate',
  5. // ...
  6. ]

Sails version support

It only supports Sails 1.x+

Advanced Usage

You can create a policy, say we called it api/policies/paginate.js

  1. module.exports = require('sails-pagination-middleware').generate({});

Then in config/policies.js you can specify which find call will get augmented with the count field.

  1. UserController: {
  2. 'find': ['isLoggedIn', 'paginate'],
  3. }

Extra Options

There are options that you can change, just call the generate() function

  1. require('sails-pagination-middleware').generate({
  2. // if you want to add/remove an action i.e. 'user/search' or whatever
  3. // the array can contain a string for exact match or a regular expression for a pattern
  4. // if you use this options, the array you use will override the default, it will NOT concat
  5. // this is the default,
  6. // it will match all the usual :model/find, :model/:id/:association/populate
  7. actions: ['find', 'populate', /^.*\/(find|populate)$/]
  8. // if the .count() calls fails, to throw an error or not
  9. silentError: false // default
  10. }),