2014-09-02 35 views
1

我试图使用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); 

回答

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 

}) 
+0

Thanx @ Neil,这个答案真的有帮助。 – 2016-08-03 06:25:53

0

我会添加到选定的答案,在一个更复杂的例子的情况下,应该提防架构的缓存:我的新模型,使用相同的名称,这是现有模型创建没有增加pagniate功能。

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

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

希望这可以帮助别人!