Meteor中的简单模式错误

时间:2015-04-09 18:40:51

标签: javascript meteor schema accounts

我正在使用meteor帐户和简单架构供用户注册并在我的应用中输入他们的个人资料信息。我为用户定义了一个模式,并为其附加了一个地址模式。但是,当我去注册一个帐户时,我不断收到错误“要求的地址”,尽管我填写了地址所需的所有字段。这是我的架构:

Schemas.UserAddress = new SimpleSchema({ //UserAddress schema defined

streetAddress: {
    type: String,
    max: 100,
    optional: false
},
city: {
    type: String,
    max: 50,
    optional: false
},
state: {    
    type: String,
    regEx: /^A[LKSZRAEP]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[ARW]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY]$/,
    optional: false
},
zipCode: {
type: String,
regEx: /^[0-9]{5}$/,
optional: false

} });

var Schemas = {};

Schemas.UserProfile = new SimpleSchema({
companyName: {
    type: String,
    regEx: /^[a-zA-Z-]{2,25}$/,
    optional: false
},
tireMarkup: {
    type: Number,
    optional: true,
    min: 1
},
phoneNum: {
    type: String,
    regEx: /^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$/,
    optional: false    
},
confirmed: {
    type: Boolean,
    optional: true
},
});


Schemas.User = new SimpleSchema({
emails: {
    type: [Object],
    optional: false
},
"emails.$.address": {
    type: String,
    regEx: SimpleSchema.RegEx.Email
},
"emails.$.verified": {
    type: Boolean
},
createdAt: {
    type: Date
},
profile: {
    type: Schemas.UserProfile,
    optional: false
},
address: { //Attach user address schema
    type: Schemas.UserAddress, 
    optional: false
},
services: {
    type: Object,
    optional: true,
    blackbox: true
}
});

Meteor.users.attachSchema(Schemas.User);

以下是我的帐户配置,它会创建注册表单:

Meteor.startup(function () {
AccountsEntry.config({
  logo: '',                  // if set displays logo above sign-in options
  termsUrl: '/terms-of-use',         // if set adds link to terms  'you agree to ...' on sign-up page
  homeRoute: '/',                    // mandatory - path to redirect to after sign-out
  dashboardRoute: '/dashboard/',      // mandatory - path to redirect to after successful sign-in
  profileRoute: '/profile',
  passwordSignupFields: 'EMAIL_ONLY',
  showOtherLoginServices: true,      // Set to false to hide oauth login buttons on the signin/signup pages. Useful if you are using something like accounts-meld or want to oauth for api access
  extraSignUpFields: [

     {
        field: "companyName",                           
        label: "Company Name",                     
        placeholder: "Petrocon",                
        type: "text",                           
        required: true                         
    },
    {
        field: "firstName",                       
        label: "First Name",                    
        placeholder: "John",                
        type: "text",                            
        required: true                           
    },  
    {
        field: "lastName",                          
        label: "Last Name",                      
        placeholder: "Nguyen",                 
        type: "text",                            
        required: true                          
    },
    {   field: "streetAddress",
        label: "Street Address",
        placeholder: "12345 Main Street",
        type: "text",
        required: true
    },
    {   field: "city",
        label: "City",
        placeholder: "Springfield",
        type: "text",
        required: true
    },
    {   field: "state",
        label: "State",
        placeholder: "Missouri",
        type: "text",
        required: true
    },
    {   field: "zipCode",
        label: "Zip Code",
        placeholder: "65801",
        type: "text",
        required: true
    },
    {
        field: "phoneNum",                          
        label: "Contact Number",                     
        placeholder: "316-000-0000",                 
        type: "text",                            
        required: true                           
    }  
    ]
});
});

正如您所看到的,我在AccountsEntry.config中定义了地址模式中的所有字段。因此我不知道为什么当我输入表单中的所有信息时,我收到错误'address required'。有谁知道发生了什么?提前谢谢!

1 个答案:

答案 0 :(得分:1)

看起来您正在使用account-entry包。您可以在此文件中查看创建帐户的代码:

https://github.com/Differential/accounts-entry/blob/9aac00cb3c67afcbb1cc990c7af1f2c7607a2337/server/entry.coffee

第29行看起来像这样:

profile: _.extend(profile, user.profile)

如果在调用extend方法后调试并查看profile的值,你会看到:

{
    "companyName": "Petrocon",
    "firstName": "John",
    "lastName": "Nguyen",
    "streetAddress": "12345 Main Street",
    "city": "Springfield",
    "state": "Missouri",
    "zipCode": "65801",
    "phoneNum": "316-000-0000"
}

您的Schemas.User架构没有名为“address”的属性。

可能有一些灵活的方法来做你正在寻找的东西,但最简单的方法是摆脱Schemas.UserAddress模式。将这些属性(streetAddress,city,state,zipCode)移动到Schemas.UserProfile架构中,它将起作用。