2015-07-21 188 views
0

我在更新用戶帳戶時遇到了一些麻煩。我用下面的架構(collection2):流星collection2不更新

的lib /收藏/ users.js

Users = Meteor.users; 




var Schemas = {}; 


Schemas.User = new SimpleSchema({ 
gender: { 
    type: Number, 

    min: 1 

}, 

s_gender: { 
    type: Number, 
    min: 1, 
    optional:false 
}, 
picture: { 
    type: String, 
    custom: function() { 

     var base64Matcher = new RegExp("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$"); 
     var value = this.value.replace("data:image/png;base64,",""); 
     if(!base64Matcher.test(value)) 
     { 
      return 'no picture'; 
     } 
     else 
     { 
      return true; 
     } 

    } 
} 
}); 

Users.attachSchema(Schemas.User); 

現在我用下面的代碼更新:

客戶端/模板/ start.js

Users.update({_id: Meteor.userId()}, { 
     $set: {picture: picture, gender: gender, s_gender: s_gender} 
    }, {validationContext: "updateUser"}, function (error, result) { 

     if (error) { 
      errorObjs = Users.simpleSchema().namedContext("updateUser").invalidKeys(); 

      console.log(errorObjs); 
     } 

     console.log(result); 
    }); 

驗證通過,但結果中只顯示「0」(錯誤爲空) - 更新不起作用。如果我有一個空字段顯示錯誤,所以驗證工作正常。如果我分離架構,更新工作正常。

我在這裏忘記了什麼,或者爲什麼在驗證通過時他不更新?

//編輯:另外我看到,Meteor不會再創建用戶。

回答

0

我相信你需要使用Users.profile.foo而不是Users.foo,因爲Users是一個特殊的流星體,你只能在profile字段中保存新的字段。嘗試使用簡單模式/集合2建議用戶模式作爲起點(我將其複製)。

Schema = {}; 

Schema.UserProfile = new SimpleSchema({ 
    firstName: { 
     type: String, 
     regEx: /^[a-zA-Z-]{2,25}$/, 
     optional: true 
    }, 
    lastName: { 
     type: String, 
     regEx: /^[a-zA-Z]{2,25}$/, 
     optional: true 
    }, 
    birthday: { 
     type: Date, 
     optional: true 
    }, 
    gender: { 
     type: String, 
     allowedValues: ['Male', 'Female'], 
     optional: true 
    }, 
    organization : { 
     type: String, 
     regEx: /^[a-z0-9A-z .]{3,30}$/, 
     optional: true 
    }, 
    website: { 
     type: String, 
     regEx: SimpleSchema.RegEx.Url, 
     optional: true 
    }, 
    bio: { 
     type: String, 
     optional: true 
    } 
}); 

Schema.User = new SimpleSchema({ 
    username: { 
     type: String, 
     regEx: /^[a-z0-9A-Z_]{3,15}$/ 
    }, 
    emails: { 
     type: [Object], 
     optional: true 
    }, 
    "emails.$.address": { 
     type: String, 
     regEx: SimpleSchema.RegEx.Email 
    }, 
    "emails.$.verified": { 
     type: Boolean 
    }, 
    createdAt: { 
     type: Date 
    }, 
    profile: { 
     type: Schema.UserProfile, 
     optional: true 
    }, 
    services: { 
     type: Object, 
     optional: true, 
     blackbox: true 
    } 
}); 

Meteor.users.attachSchema(Schema.User); 

來源:https://github.com/aldeed/meteor-collection2

的通知 「曲線模式」 是用戶模式之前加載