Estoy tratando de usar el mongoose-pagination y traté de seguir la documentación proporcionada, pero no funciona No parece estar trabajando con mi modelo. Recibo este mensaje de error:

/Users/user/Desktop/Projects/node/blog/app/models/blogModel.js:16
BlogPostSchema.paginate({}, 2, 10, function(error, pageCount, paginatedResults
               ^
TypeError: Object #<Schema> has no method 'paginate'
    at Object.<anonymous> (/Users/user/Desktop/Projects/node/blog/app/models/blogModel.js:16:16)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/Users/user/Desktop/Projects/node/blog/server.js:18:16)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)

Y no estoy seguro de por qué recibo este error porque se supone que el complemento permite el método de paginación.

BlogModel.js:

var mongoose    = require('mongoose');
var Schema      = mongoose.Schema;
var mongoosePaginate = require('mongoose-paginate');



var BlogPostSchema  = new Schema({
        title: String,
        author: String,
        content: String,
        date: { type: Date, default: Date.now }
});

BlogPostSchema.plugin(mongoosePaginate);

BlogPostSchema.paginate({}, 2, 10, function(error, pageCount, paginatedResults, itemCount) {
    if (error) {
        console.error(error);
    } else {
        console.log('Pages:', pageCount);
    }
});

module.exports = mongoose.model('Blogpost', BlogPostSchema);
1
cphill 3 sep. 2014 a las 03:38

2 respuestas

La mejor respuesta

Estás llamando a esto mal. El método .paginate() se instancia en el modelo. Entonces configura el complemento en el esquema y luego realiza llamadas desde la instancia de su modelo. En forma simplificada:

var mongoose = require('mongoose'),
    mongoosePaginate = require('mongoose-paginate'),
    Schema = mongoose.Schema;


var blogPostSchema = new Schema({
  title: String,
  author: String,
  content: String,
  date: { type: Date, default: Date.now }
});

blogPostSchema.plugin( mongoosePaginate );

var Blogpost = mongoose.model( "Blogpost", blogPostSchema );

mongoose.connect('mongodb://localhost/test')

Blogpost.paginate({}, 2, 10, function(err,pageCount, results, count) {

  // do something with results

})
1
Neil Lunn 3 sep. 2014 a las 04:58

Agregaría a la respuesta seleccionada que, en el contexto de un ejemplo más complejo, uno debe tener cuidado con el almacenamiento en caché de esquemas: mi nuevo modelo se creó con el mismo nombre que un modelo existente que no se aumentó con la función pagniate.

Cuando estaba creando el Modelo usando el Esquema, estaba obteniendo la versión anterior (en caché) en lugar de la nueva (la que tenía paginado).

En resumen: ¡use diferentes nombres para diferentes modelos!

Espero que esto ayude a alguien!

0
Drou 22 dic. 2015 a las 04:17