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

Nic*_*w31 1 methods model-view-controller mongoose node.js express

我正在尝试将方法从 model.js 传递到我的 Route.js ..并且我的路线找不到任何方法!我搜索了解决方案并测试了很多代码,但没有成功。

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

这是我的代码的一部分:


路由.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 });
    });
};
Run Code Online (Sandbox Code Playgroud)

会员模型.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;
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*yHK 5

我认为你这里有几个问题:

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