使用mongoose分页包的模型错误

我试图使用mongoose分页包,并试图按照提供的文档,但它似乎没有与我的模型。 我收到此错误消息:

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

我不知道为什么我收到这个错误,因为插件应该允许分页方法。

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

你说错了。 .paginate()方法在模型上实例化。 所以,你在架构上设置插件,然后从你的模型实例进行调用。 简化forms:

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

我将添加到选定的答案,在一个更复杂的例子的上下文中,应该提防模式caching:我的新模型创build使用相同的名称作为现有的模型,没有增加pagniate函数。

当我使用Schema创build模型时,我得到的是旧版本(caching)而不是新版本(带有分页的版本)。

简而言之:为不同型号使用不同的名称!

希望这可以帮助别人!