Mongoose实例方法返回undefined

时间:2015-03-20 21:56:16

标签: node.js mongodb mongoose

我正在尝试解析并将名称字段保存为mongoose User模型的单独名字和姓氏。我的模型架构如下所示:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var UserSchema = new Schema({
    username: {
        type: String,
        required: true
    },
    firstName: {
        type: String
    },
    lastName: {
        type: String
    },
    role: {
        type: String,
        default: 'Guest',
        enum: ['Organiser', 'Recipient', 'Contributor','Guest']
    }
})

UserSchema.methods = {

    saveParsedNames: function (nameString) {

        function parseName(str) {
            var nameArr = str.split(' ');
            var firstName = nameArr[0];
            var lastName = nameArr.slice(1,nameArr.length).join(' ').trim();
            var parsedNames = [firstName, lastName];
            return parsedNames;
        }

        var parsedNames = parseName(nameString);
        this.firstName = parsedNames[0];
        this.lastName = parsedNames[1];
        return this.save()

    }

}

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

但是,现在,当我调用user.saveParsedNames("some name string")时,不返回任何内容,也没有任何内容写入数据库。也不会在方法的错误块中抛出任何错误。它是“未定义的”。它闻起来像一些异步问题,但我看不出在哪里。有人可以点亮这里吗?

如何使用新的firstName和lastName属性更新User模型,并使用saveParsedNames()方法返回更新的对象?

更新

这是更新的方法,因为它现在不返回任何内容,但可以通过回调正确调用。我已经大量使用Neil Lunn的答案来获得类似的问题,以便在这里找到正确的方法:

UserSchema.methods = {

    saveParsedNames: function (nameString, cb) {

        var model = this.model(this.constructor.modelName, this.schema);

        function parseName(str) {
            var nameArr = str.split(' ');
            var firstName = nameArr[0];
            var lastName = nameArr.slice(1,nameArr.length).join(' ').trim();
            var parsedNames = [firstName, lastName];
            return parsedNames;
        }

        var parsedNames = parseName(nameString);

        console.log(model);

        return model.findByIdAndUpdate(this._id, {
                firstName: parsedNames[0],
                lastName:parsedNames[1]
             },cb);
    }

}

这就是它被称为:

createdUser.saveParsedNames(nameString, function (err, doc) {
                console.log(doc);
            });

感谢Neil Lunn在他的另一篇文章https://stackoverflow.com/a/22495224/52092

上的回答

0 个答案:

没有答案