Как добавить Meteor.userId() в SimpleSchema через autoValue?

Внутри папки libs я создаю коллекции, используя SimpleSchema. Я хочу добавить Meteor.userId в некоторые поля через autoValue, например:

Collection = new Meteor.Collection('collection');
Collection.attachSchema(new SimpleSchema({
    createdByUser: {
        type: String,
        max: 20,
        autoValue: function() {
            return Meteor.userId();
        }
    }
});

Однако при этом я получаю следующую ошибку:

Error: Meteor.userId can only be invoked in method calls. Use this.userId in publish functions.

Я попробовал это также:

var userIdentification = Meteor.userId();
Collection = new Meteor.Collection('collection');
Collection.attachSchema(new SimpleSchema({
    createdByUser: {
        type: String,
        max: 20,
        autoValue: function() {
            return userIdentification;
        }
    }
});

Это приведет к сбою моего приложения, хотя:

=> Exited with code: 8
=> Your application is crashing. Waiting for file change.

Есть идеи?

1 ответ

Решение

userId информация предоставляется autoValue отcollection2 через this

Опция autoValue предоставляется пакетом SimpleSchema и документируется там. Collection2 добавляет к этому следующие свойства для любой функции autoValue, которая вызывается как часть операции базы данных C2:

  • isInsert: True, если это операция вставки
  • isUpdate: True, если это операция обновления
  • isUpsert: True, если это операция upsert (либо upsert(), либо upsert: true)
  • userId: идентификатор текущего пользователя, вошедшего в систему. (Всегда пусто для действий, инициируемых сервером.)

Таким образом, ваш код должен читаться как:

Collection = new Meteor.Collection('collection');
Collection.attachSchema(new SimpleSchema({
    createdByUser: {
        type: String,
        max: 20,
        autoValue: function() {
            return this.userId;
        }
    }
});
Другие вопросы по тегам