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;
感谢帮助我的时间。 如果你想要其他信息,告诉我!
我想你在这里有一些问题:
- 您的模式的实例方法应该在
MemberSchema.methods
(而不是.method
)上定义。 - 像
findAll
这样的返回实例的方法应该被定义为模式的静态方法(在MemberSchema.statics)
而不是实例方法。 - 您应该导出
MyModel
,而不是像现在这样new MyModel
一个new MyModel
实例。module.exports = MyModel;
-
route.js
不应该在其require
使用new
,因为您希望MyModel类可用于该文件,而不是它的一个实例。