2017-05-11 2 views
1

NodeJS、Express、およびMongoDB APIにサーバーサイドページネーションを追加しようとしています。サーバーサイドからのマングースページ分割

APIは、mongooseを使用してデータベースを処理します。

コントローラからの応答をカスタマイズする方法がわかりません。

モデル:取得、すべてのクライアントのための

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); 

コントローラ:私は何かに、コントローラに結果をカスタマイズすることができますどのように

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); 
     }); 
    }); 

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


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

module.exports = clientController; 

ルートは、クライアントを取得しますこのように:

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

私はすでにページネーションを計算する機能を持っていますが、コントローラーの結果にページネーションに関する情報を追加する方法はわかりません。

私は経路にページングデータを追加する前に、コントローラのページングロジックを処理する必要がありました。

また、経路のページネーションを処理する方が良いですか?事前

+0

私が作ったMongoose Repositoryクラスは、おそらくhttps://www.npmjs.com/package/morepo – CreasolDev

答えて

1

ありがとうございますのpaginateと呼ばれるマングースモデルにメソッドを作成することができます:コントローラの変更に続いて

clientSchema.methods.paginate = function(pageNo, callback){ 

    var limit = 10; 
    var skip = pageNo * (limit - 1); 
    var totalCount; 

    //count documents 
    this.count({}, function(err, count)){ 
     if(err){ 
      totalCount = 0; 
     } 
     else{ 
      totalCount = count; 
     } 
    } 
    if(totalCount == 0){ 
     return callback('No Document in Database..', null); 
    } 
    //get paginated documents 
    this.find().skip(skip).limit(limit).exec(function(err, docs){ 

     if(err){ 
      return callback('Error Occured', null); 
     } 
     else if(!docs){ 
      return callback('Docs Not Found', null); 
     } 
     else{ 
      var result = { 
       "totalRecords" : totalCount, 
       "page": pageNo, 
       "nextPage": pageNo + 1, 
       "result": docs 
      }; 
      return callback(null, result); 
     } 

    }); 

}); 

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

はマングースモデルを宣言する前にこれを追加

app.get('/api/clients', (req, res) => { 
    Client.paginate(pageNo, function(err, response){ 

    if (err) { 
     return res.status(500).json({ 
     message : "Error en aplicacion", 
     error : err 
     }); 
    } 
    return res.status(200).json(response); 
    }); 

});

関連する問題