Как добавить 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.

Любые идеи?


person Moritz Schmitz v. Hülst    schedule 31.10.2015    source источник


Ответы (1)


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

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

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

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

Collection = new Meteor.Collection('collection');
Collection.attachSchema(new SimpleSchema({
    createdByUser: {
        type: String,
        max: 20,
        autoValue: function() {
            return this.userId;
        }
    }
});
person Serkan Durusoy    schedule 31.10.2015
comment
this.userId() у меня не сработало, вместо этого я использовал Meteor.user()._id - person Ronin; 08.01.2016
comment
потому что правильная форма this.userId, а не this.userId(). Кроме того, это намного быстрее, чем получение Meteor.user() или Meteor.userId(), которые также не всегда доступны везде, а именно публикации функций - person Serkan Durusoy; 08.01.2016