Socket
Socket
Sign inDemoInstall

url-db-paging

Package Overview
Dependencies
1
Maintainers
4
Versions
8
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    url-db-paging

A library to help creating paging results through URLs


Version published
Weekly downloads
4
increased by33.33%
Maintainers
4
Install size
112 kB
Created
Weekly downloads
 

Readme

Source

url-db-paging

Build Status npm version

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 string
  • defaultSortField: default primary sort field
  • idField: data's id field
  • root: base url
  • limit: limit results per page
  • queryBuilderType: 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,               // query string
    defaultSortField: '-created',   // default sort field
    defaultSortField: {column: '-created', json: 'createdAt'}, // define the column to sort and the JSON value of createdAt
    idField: '_id',                 // data's id field
    idField: {column: '_id', json: 'id'}, // define the id column in database and
    root: 'http://service/users',   // base url
    limit: limit,                   // limit per page
    queryBuilderType: 'mongoose'    // query builder type
  });

  //OR: When your JSON data it's different than the column/property in yours database you can define those changes like:
  var paging = new Paging({
    query: req.query,               // query string
    defaultSortField: {column: '-created', json: 'createdAt'} // define the column to sort and the JSON value of createdAt
    idField: {column: '_id', json: 'id'} // define the id column in database and
    root: 'http://service/users',   // base url
    limit: limit,                   // limit per page
    queryBuilderType: 'mongoose'    // query builder type
  });

  // add sort db query
  paging.addSortDbQuery(userQuery);

  userQuery
    .sort(paging.getSortQuery())    // sort using paging
    .limit(paging.getLimitQuery())  // limit using paging
    .exec()
    .then(result, next);

  function result(users) {
    var data = paging.buildPagingResult(users); // add paging into data result
    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

Keywords

FAQs

Last updated on 01 Feb 2016

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc