5

所以,我刚刚开始了一个流星项目,并包含了 accounts-password 包。该软件包仅支持几个键。我想向用户集合添加一个新的 SimpleSchema,其中包含更多字段。

我没有被赋予创建用户集合的另一个实例

@users = Mongo.Collection('users');
//Error: A method named '/users/insert' is already defined

我可以附加一个模式,但将被迫保留许多可选字段,否则可能无法使用默认包注册。

我可以在不使其他字段可选的情况下添加 simpleSchema 并且仍然能够正确登录吗?

或者这种情况还有其他解决方法吗?

提前感谢您的帮助

4

2 回答 2

-1

您可以通过以下方式获取用户集合:

@users = Meteor.users;

您可以在 collection2 包的文档中找到定义用户集合的好例子:https ://atmospherejs.com/aldeed/collection2

Schema = {};
Schema.User = new SimpleSchema({
    username: {
        type: String,
        regEx: /^[a-z0-9A-Z_]{3,15}$/
    },
    emails: {
        type: [Object],
        // this must be optional if you also use other login services like facebook,
        // but if you use only accounts-password, then it can be required
        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
    },
    // 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
    }
});
于 2015-05-26T08:14:13.277 回答
-2

您可以通过三种方式来适应将模式附加到此类集合:

  • 使每个新字段都是可选的。
  • 具有默认值(例如默认值)friends[]
  • 更新 UI 以包含新的强制性元素(“P = NP”或“P!= NP”的单选)。

每个选项本身都有一定的有效性。选择在当前情况下看起来最合乎逻辑的东西,以及最不让你头疼的东西。

someField当他注册时,您绝对需要用户给定的值吗?然后你必须更新 UI 来获取这个值。
是否存在someField重要,是否可以初始化为默认对象(空数组,,,null0...)?然后一个默认值将适合,它将在 Collection2 清理文档时添加。
以上都不是?可选的。


作为个人说明,我更喜欢这种代码:

someUser.friends.forEach(sendGifts);

对这种:

if(someUser.hasOwnProperty('friends')) {//Or _.has(someUser, 'friends') but it sounds sad
  someUser.friends.forEach(sendGifts);
}

在第二个代码friends中是一个可选字段,所以我们不确定它是存在还是未定义。调用forEachundefined导致一个很大的错误,因此我们必须首先检查字段是否存在......因此,为了一致性简单性,我建议稍微避免可选字段。

于 2015-05-26T08:32:18.027 回答