Thursday, 11 May 2017

mongoose pagination from server side

I am trying to add server side pagination to a NodeJS, Express and MongoDB API.

The API use mongoose to handle the database.

I am lost in how to customize the response from the Controller.

Model:

const mongoose = require('mongoose');
const Schema =  mongoose.Schema;

const clientSchema = Schema({
  code: {
    type: String,
    required: [true,'Code no puede estar vacio']
  },
  name: {
    type: String,
    required: [true,'Name no puede estar vacio']
  }
},{
  timestamps: true
});

const Client = module.exports = mongoose.model('clients',clientSchema);

Controller for get all clients:

const mongoose = require("mongoose");
const Client = require('../models/client');
const clientController = {};


clientController.index = (limit, callback) => {
  Client.find(callback).limit(limit);
};

module.exports = clientController;

Route to get the clients:

  app.get('/api/clients', (req, res) => {
      Client.index(limit,(err, client) => {

        if (err) {
          res.status(500).json({
            msg: "Error en aplicacion",
            err
          });
        }
        res.status(200).json(client);
      });
  });

How can I customize the result in the controller to something like this:

[
{
"totalRecords":"99999999999",
"offset":"888888",
"page":"4",
"nextPage":"5"
"result":{...}
}
]

I already have a function to calculate the pagination, But I don't know how to add the information about the pagination in the result of the controller.

Before I was adding the pagination data in the route, But I want to handle the pagination logic in the controller.

Or is better handle the pagination in the route?

Thanks in advance



via joselegit

No comments:

Post a Comment