Коллекция метеоров2 не обновляется

У меня возникли проблемы с обновлением учетной записи пользователя. Я использую следующую схему (коллекция2):

библиотека/коллекции/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 больше не создает пользователей.


person user2891491    schedule 21.07.2015    source источник


Ответы (1)


Я считаю, что вам нужно использовать Users.profile.foo вместо Users.foo, потому что Users — это специальная коллекция метеоров, и вы можете сохранять новые поля только внутри поля профиля. Попробуйте использовать предложенную Простую схему/коллекцию 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

person CyberClaw    schedule 21.07.2015