0

我是流星和编码新手。我整天都在尝试使用 aldeed:autoform 和 aldeed:collection2 来向 Meteor.users 添加个人资料信息。我的成功各不相同,我几乎得到了我想要的(发布到 mongo,但创建了新的 id 而不是附加到当前的),但不知何故迷失了我的位置。现在,我不断得到

SimpleSchema invalid keys ... 0: Object
name: "emails"
type: "expectedArray"

我“提交”的任何内容都不会发布到 Mongo。

以下是我认为我需要的所有东西:collections/simpleSchema.js

Meteor.users.allow({
    update: function (userId, doc){
        return !!userId;
    }
});


Schema.UserProfile = new SimpleSchema({
    firstName: {
        type: String,
        optional: true
    },
    lastName: {
        type: String,
        optional: true
    },
    birthday: {
        type: Date,
        optional: true
    },
    grade: {
        type: String,
        allowedValues: ['5', '6', '7', '8'],
        optional: true
    }
});

Schema.User = new SimpleSchema({        
    username: {
        type: String,
        // For accounts-password, either emails or username is required, but not both. It is OK to make this
        // optional here because the accounts-password package does its own validation.
        // Third-party login packages may not require either. Adjust this schema as necessary for your usage.
        optional: true,
        autoform: {
            type: "hidden"
        }
    },
    emails: {
        type: Array,
        // For accounts-password, either emails or username is required, but not both. It is OK to make this
        // optional here because the accounts-password package does its own validation.
        // Third-party login packages may not require either. Adjust this schema as necessary for your usage.
        optional: true,
        autoform: {
            type: "hidden"
        }
    },
    "emails.$": {
        type: Object,
        autoform: {
            type: "hidden"
        }
    },
    "emails.$.address": {
        type: String,
        regEx: SimpleSchema.RegEx.Email,
        autoform: {
            type: "hidden"
        }
    },
//    "emails.$.verified": {
//        type: Boolean
//    },
    createdAt: {
        type: Date,
        optional: true,
        autoValue: function(){
            return new Date();
        },
        autoform: {
            type: "hidden"
        }
    },
    profile: {
        type: Schema.UserProfile,
        optional: true
    },
    // Make sure this services field is in your schema if you're using any of the accounts packages
    services: {
        type: Object,
        optional: true,
        blackbox: true,
        autoform: {
            type: "hidden"
        }
    }
    // Add `roles` to your schema if you use the meteor-roles package.
    // Option 1: Object type
    // If you specify that type as Object, you must also specify the
    // `Roles.GLOBAL_GROUP` group whenever you add a user to a role.
    // Example:
    // Roles.addUsersToRoles(userId, ["admin"], Roles.GLOBAL_GROUP);
    // You can't mix and match adding with and without a group since
    // you will fail validation in some cases.
    //roles: {
    //    type: Object,
    //    optional: true,
    //    blackbox: true
    //}
    // Option 2: [String] type
    // If you are sure you will never need to use role groups, then
    // you can specify [String] as the type
//    roles: {
//        type: [String],
//        optional: true
//    }
});

Meteor.users.attachSchema(Schema.User);

客户端.js

SimpleSchema.debug = true

Template.NewUser.helpers({
  updateUserForm: function(){
    return Meteor.user;
  }
});

服务器.js

Meteor.methods({
 update: function(doc) {
   // Important server-side check for security and data integrity
   check(doc, Meteor.users);
    Meteor.users.clean(doc);
 }
});

感谢您的阅读!

4

1 回答 1

0

您没有在内容中包含您的 html。但是,您似乎正在使用自动表单上的方法更新。为了让它在你的服务器上工作,你需要调用 Meteor.user.update() 操作符。

updateProfile: function(doc, doc_id) {
  var theUser = Meteor.users.findOne({
    _id: doc_id
  });
  if (theUser._id !== Meteor.userId()) {
    throw new Meteor.Error("Not Authorised");
  } else {
    Meteor.users.update({
      _id: doc_id
    }, doc);
  }
},

于 2016-01-08T13:26:26.577 回答