使用Mongoose分页包的模型错误

时间:2014-09-02 23:38:39

标签: javascript node.js mongodb mongoose

我正在尝试使用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);

2 个答案:

答案 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的版本)。

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

希望这能有所帮助!