jos*_*git 5 mongoose mongodb node.js express
我正在尝试将服务器端分页添加到 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);
Run Code Online (Sandbox Code Playgroud)
获取所有客户端的控制器:
const mongoose = require("mongoose");
const Client = require('../models/client');
const clientController = {};
clientController.index = (limit, callback) => {
Client.find(callback).limit(limit);
};
module.exports = clientController;
Run Code Online (Sandbox Code Playgroud)
获取客户途径:
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);
});
});
Run Code Online (Sandbox Code Playgroud)
如何将控制器中的结果自定义为如下所示:
[
{
"totalRecords":"99999999999",
"offset":"888888",
"page":"4",
"nextPage":"5"
"result":{...}
}
]
Run Code Online (Sandbox Code Playgroud)
我已经有一个计算分页的函数,但我不知道如何在控制器的结果中添加有关分页的信息。
在我在路由中添加分页数据之前,但我想在控制器中处理分页逻辑。
或者更好地处理路线中的分页?
提前致谢
您可以在 mongoose 模型中创建一个名为 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);
Run Code Online (Sandbox Code Playgroud)
然后在控制器中更改:
app.get('/api/clients', (req, res) => {
//You could put page number in request query ro request params
Client.paginate(req.body.pageNo, function(err, response) {
if (err) {
return res.status(500).json({
message : "Error en aplicacion",
error : err
});
}
return res.status(200).json(response);
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9415 次 |
| 最近记录: |