如何通过autoValue将Meteor.userId()添加到SimpleSchema?

时间:2015-10-31 15:30:11

标签: javascript meteor meteor-collection2 simple-schema

在我的libs文件夹中,我使用SimpleSchema创建集合。我想通过autoValue将Meteor.userId添加到某些字段中,如下所示:

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 个答案:

答案 0 :(得分:3)

userId信息通过this

提供给autoValue by collection2
  

autoValue选项由SimpleSchema包提供,并在那里记录。 Collection2为任何作为C2数据库操作的一部分调用的autoValue函数添加以下属性:

     
      
  • isInsert:如果是插入操作,则为True
  •   
  • isUpdate:如果是更新操作,则为True
  •   
  • isUpsert:如果是upsert操作(upsert()或upsert:true),则为True。
  •   
  • userId:当前登录用户的ID。 (对于服务器启动的操作,始终为null。)
  •   

所以你的代码应该是:

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