0.0.3 • Published 6 years ago

mongoose-paginate-hook v0.0.3

Weekly downloads
2
License
ISC
Repository
github
Last release
6 years ago

Mongoose paginate hook

Provide a schema plugin that can hook some functions to modify output and input for pagination method

Usage

const mongoosePaginate = require('mongoose-paginate');
const mongoosePaginateHook = require('mongoose-paginate-hook');

// Define book schema and use plugins
const BookSchema = new Schema({
    name: {type: String, required: true},
});
BookSchema.plugin(mongoosePaginate); // add paginate method
BookSchema.plugin(mongoosePaginateHook({ beforePaginationFunction, afterPaginationFunction})); // hook functions

API

import by const mongoosePaginateHook = require('mongoose-paginate-hook');

mongoosePaginateHook(options) where options has following properties:

optiontypedescription
paginateFunctionNamestringpagination method name
afterPaginationFunctionfunction(result: object): objectalter result. It is useful to change key name
beforePaginationFunctionfunction(paginateFunction: function, [query], [options], [callback])alter pagination input. It is useful to change the original pagination function signature. paginateFunction is the original pagination method. NOTE: you should return paginateFunction(...)

Example

// Imports
const mongoosePaginate = require('mongoose-paginate');
const mongoosePaginateHook = require('mongoose-paginate-hook');

// Hook functions
function afterPaginationFunction(result) {
    // Change 'docs' key to 'data' key
    result.data = result.docs;
    delete result.docs;

    result.pageIndex = result - 1; // to change zero-base
    return result;
}

/**
 *
 * new pagination method signature
 * @param query
 * @param paginateFunction
 * @param {{page: {number, size}}} paginationOptions
 * @return {*}
 */
function beforePaginationFunction(paginateFunction, query = {}, paginationOptions) {
    const pageIndex = Number(paginationOptions.page.number) + 1; // change to zero-base
    const pageSize =  Number(paginationOptions.page.size);

    return paginateFunction(query, {page: pageIndex, limit: pageSize}); // should return paginateFunction(...)
}

// Define book schema and use plugins
const BookSchema = new Schema({
    name: {type: String, required: true},
});
BookSchema.plugin(mongoosePaginate); // add paginate method
BookSchema.plugin(mongoosePaginateHook({ beforePaginationFunction, afterPaginationFunction})); // hook functions

// Model
const BookModel = mongoose.model('Book', BookSchema);

// Use the pagination method
BookModel.paginate(
    {},
    {
        page: {
            number: 1,
            size: 15,
        }
    });