url-db-paging
A library to help creating paging results through URLs.
Features
- Build a paging query with a search provider based in some URL. Which will use offset fields due performance reasons.
- Build REST JSON output with link to the next and previous pages.
Search providers
Do you want another provider? Please open an issue or even better send us a pull request.
Usage
Options
query
: request query stringdefaultSortField
: default primary sort fieldidField
: data's id fieldroot
: base urllimit
: limit results per pagequeryBuilderType
: query builder type (mongoose, solr or knex)
var express = require('express'),
Paging = require('url-db-paging'),
User = require('./models/user');
var app = express();
app.get('/', function(req, res, next){
var userQuery = User.find();
var limit = parseInt(query.limit, 10) || 20;
var paging = new Paging({
query: req.query,
defaultSortField: '-created',
defaultSortField: {column: '-created', json: 'createdAt'},
idField: '_id',
idField: {column: '_id', json: 'id'},
root: 'http://service/users',
limit: limit,
queryBuilderType: 'mongoose'
});
var paging = new Paging({
query: req.query,
defaultSortField: {column: '-created', json: 'createdAt'}
idField: {column: '_id', json: 'id'}
root: 'http://service/users',
limit: limit,
queryBuilderType: 'mongoose'
});
paging.addSortDbQuery(userQuery);
userQuery
.sort(paging.getSortQuery())
.limit(paging.getLimitQuery())
.exec()
.then(result, next);
function result(users) {
var data = paging.buildPagingResult(users);
return res.status(200).send(data);
}
});
module.exports = app;
Output Result (Example)
{
list:[
{ ... },
{ ... },
{ ... }
],
_links: {
previous: {
href: "http://service/users?limit=5&sort=-created&offset_date=2014-07-31T12%3A05%3A24.865Z&offset_id=53da3104d14bdb2500cc203d&dir=backward"
},
next: {
href: "http://service/users?limit=5&sort=-created&offset_date=2014-07-31T12%3A05%3A24.854Z&offset_id=53da3104d14bdb2500cc2035&dir=forward"
}
}
}
Contributing
It is required to use editorconfig and please write and run specs before pushing any changes:
npm test