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