Mongoose无法保存模型更改

时间:2012-05-15 07:09:25

标签: javascript node.js mongoose

我正在尝试用mongoose更新用户文档,但我无法完成它。这是我的用户模型

var UserSchema = new Schema({
email : {
    type : String,
    unique : true
},
salt : {
    type : String,
    required : true
},
hash : {
    type : String,
    required : true
},
account_no : {
    type : String,
    required : true,
    unique : true
},
activate_until:{
    date:{ type: Date, default: Date.now }  
    },
    valid : {
        type : Boolean,
        required : false
    },
    reset_token:{
        type : String 
    },
    reset_until:{
        date:{ type: Date, default: Date.now }  
        }

    });

    UserSchema.virtual('password').get(function() {
        return this._password;
    }).set(function(password) {
        this._password = password;
        var salt = this.salt = bcrypt.genSaltSync(10);
        this.hash = bcrypt.hashSync(password, salt);

        this.account_no = generateAccountNo();
        this.activate_until=new Date();
        this.valid = false;
    });

现在我正在尝试使用以下方法更新用户密码

resetAccount: function(key,password, callback) {
        User.findOne({
            reset_token : key
        }, function(err, user) {
            if(err) {
                console.error(err);
                return callback(err);
            }
            if(!user) {
                console.log("not user");
                return callback("not user", false);
            }
            var salt = user.salt = bcrypt.genSaltSync(10);
            user.hash = bcrypt.hashSync(password, salt);
            console.log(user);

            var upsertData = user.toObject();

    // Delete the _id property, otherwise Mongo will return a "Mod on _id not allowed" error
    delete upsertData._id;

    console.log( user._id);

    // Do the upsert, which works like this: If no Contact document exists with
    // _id = contact.id, then create a new doc using upsertData.
    // Otherwise, update the existing doc with upsertData
    User.update({
        _id : user._id
    },{$set:{ salt:salt,hash:user.hash}}, {
        upsert : false
    }, function(err) {
        if(err) {
            console.error(err);
            callback(err);
        }
         return callback("Password changed", user);
    });

        // this.update({account_no:key}, { $set: { valid: false }},{ upsert: true }, //function(err, user) {
        // if (err) { console.log(err);return callback(err); }
        // if (!user) { return callback(null, false); }
        // console.log(this.email);
        // return callback(user,true);
        //
        // });
    });
    },

我错过了什么让它无法正常工作?

谢谢, Feras

0 个答案:

没有答案