使用mongooseSchema.methods函数运行应用程序时出错

时间:2016-04-13 13:48:32

标签: node.js express mongoose

使用NodeJS(v0.10.25)和ExpressJS(v4.4.12)以及以下架构

var mongoose     = require('mongoose');
var Schema       = mongoose.Schema;
var models       = require('./inherit/models.js');

var userSchema   = new Schema({
    username: { type: String, required: true, unique: true, index: true },
    password: { type: String, required: true , minlength: 128, maxlength: 128 },
    email: { type: String, required: true, unique: true, index: true },
    profileImage: { type: String },
    company: { type: Schema.Types.ObjectId, ref: 'Company' },
    info: {
        name: { type: String, required: true },
        dateOfBirth: { type: Date },
        gender: { type: String, enum: ['M', 'F'] }
    },
    address: [ models.addressModel ],
    contacts: [ models.contactModel ],
    flags: [ models.flagsModel ],
    login: {
        lastDate: { type: Date },
        lastIp: { type: String },
        dtCreate: { type: Date },
        dtUpdate: { type: Date }
    }
});

userSchema.methods.findComplete = function(findQuery, populateObject) {
    if (typeof populateObject === 'undefined') populateObject = 'company';

    return this.model('User').find(findQuery).populate(populate).exec();
};

userSchema.methods.login = function(username, password) {
    //Some logic

    return true;
}

userSchema.methods.contactTypes = function() {
    return {
        1: 'E-mail adicional',
        2: 'Telefone residencial',
        3: 'Telefone comercial',
        4: 'FAX',
        50: 'Telefone celular',
        51: 'Celular (VIVO)',
        52: 'Celular (TIM)',
        53: 'Celular (Claro)',
        54: 'Celular (Oi)',
        55: 'Celular(Nextel)'
    }
}

module.exports = mongoose.model('User', userSchema);

尝试运行应用程序时出现以下错误:

TypeError: Cannot read property 'scope' of undefined
    at model.Object.defineProperty.set [as login] (/home/grupow/Projetos/mean/node_modules/mongoose/lib/document.js:1638:25)
    at applyMethods (/home/grupow/Projetos/mean/node_modules/mongoose/lib/model.js:3151:31)
    at Function.compile (/home/grupow/Projetos/mean/node_modules/mongoose/lib/model.js:3121:3)
    at Mongoose.model (/home/grupow/Projetos/mean/node_modules/mongoose/lib/index.js:392:17)
    at Object.<anonymous> (/home/grupow/Projetos/mean/models/users.js:54:27)
    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> (/home/grupow/Projetos/mean/routes/users.js:5: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)
[nodemon] app crashed - waiting for file changes before starting...

当&#39; userSchema.methods&#39;删除,应用程序运行,否则,此错误将始终显示。

你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

您不能将名称与属性同名的方法命名,对于任何对象都是如此。 尝试将方法名称更改为setLogin或其他内容。

Mongoose有一个封闭的问题,解释了我所说的here