Node.JS / Mongoose / Express – >对象没有方法“findAll”

我试图从我的model.js传递一个方法到我的route.js ..而我的路线找不到任何方法! 我search了一个解决scheme,并testing了很多代码,没有成功。

我是Node的初学者,如果这是一个愚蠢的错误,那么很抱歉。

这是我的代码的一部分:


Route.js

var mongoose = require('mongoose'); var membersModel = new require('../models/MemberModel'); // Member list page exports.list = function(req, res){ membersModel.findAll(function(err, docs){ res.render('list.jade', { title: 'My Registration App - Member list', member: docs }); }); }; 

MemberModel.js

 var mongoose = require('mongoose'), Schema = mongoose.Schema, ObjectId = Schema.ObjectId; // Open DB connection var MemberSchema = new Schema({ id : ObjectId, title : { type: String, required: true, enum: ['Mr', 'Mrs', 'Mme', 'Miss'] }, lastname : { type: String, required: true, uppercase: true, trim: true}, firstname : { type: String, required: true}, mail : { type: String, trim: true, index: { unique: true, sparse: true } }, date : Date }); // ... MemberSchema.method.findAll = function (callback) { Members.find(function (err, member) { callback(null, member) }); }; var conn = mongoose.createConnection('mongodb://localhost/members'); var MyModel = conn.model('Members', MemberSchema); var instanceMember = new MyModel; module.exports = instanceMember; 

感谢帮助我的时间。 如果你想要其他信息,告诉我!

我想你在这里有一些问题:

  1. 您的模式的实例方法应该在MemberSchema.methods (而不是.method )上定义。
  2. findAll这样的返回实例的方法应该被定义为模式的静态方法(在MemberSchema.statics)而不是实例方法。
  3. 您应该导出MyModel ,而不是像现在这样new MyModel一个new MyModel实例。 module.exports = MyModel;
  4. route.js不应该在其require使用new ,因为您希望MyModel类可用于该文件,而不是它的一个实例。