我正在尝试使用mongoose-pagination软件包并尝试按照提供的文档进行操作,但它似乎不适用于我的模型。我收到此错误消息:
/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)
而且我不确定为什么我收到此错误,因为该插件应该允许使用paginate方法。
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);
答案 0 :(得分:1)
你这么说错了。 .paginate()
方法在模型上实例化。因此,您在架构上设置插件,然后从模型实例进行调用。以简化形式:
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 :(得分:0)
我想添加一个选定的答案,在一个更复杂的例子的上下文中,应该注意Schema Caching:我的新模型是使用与未使用pagniate函数扩充的现有Model相同的名称创建的。
当我使用Schema创建Model时,我得到的是旧版本(缓存)而不是新版本(带有paginate的版本)。
简而言之:为不同的型号使用不同的名称!
希望这能有所帮助!