0

我有以下出版物:

Meteor.publish( 'usersadmin', function() {
  return Meteor.users.find( {}, { fields: { "emails": 1, "roles": 1, "profile": 1 } } )
});

我正在使用aldeed:tabular在下表中显示该出版物:

TabularTables.UsersAdmin = new Tabular.Table({
      name: "User List",
      collection: Meteor.users,
      pub: "usersadmin",
      allow: function(userId) {
        return Roles.userIsInRole(userId, 'admin');
      },
      columns: [{
        data: "emails",
        title: "Email",
        render: function(val, type, doc) {
          return val[0].address;
        }
      }, {
        data: "roles",
        title: "Roles",
        render: function(val, type, doc) {
          return val[0]._id;
        }
      }]);

该表显示正常,但在服务器终端中显示以下异常:

 Exception from sub usersadmin id 2d7NFjgRXFBZ2s44R Error: Did not check() all arguments during publisher 'usersadmin'

这是什么原因造成的?

4

1 回答 1

0

您收到此错误是因为您需要使用 . 检查传递给您的usersadmin发布函数的参数check(value, pattern)

aldeed:tabular在包中实现的反应式 DataTables将参数tableName传递给发布函数idsfields这就是抛出异常的原因。

根据文档,您需要注意以下要求:

你的功能:

  • 必须接受并检查三个参数:tableName、ids 和 fields
  • 必须发布 _id 在 ids 数组中的所有文档。
  • 必须进行任何必要的安全检查
  • 应该只发布字段对象中列出的字段,如果提供的话。
  • 还可以发布您的表格所需的其他数据

这应该可以修复错误:

Meteor.publish('usersadmin', function(tableName, ids, fields) {
  check(tableName, String);
  check(ids, Array);
  check(fields, Match.Optional(Object));
  return Meteor.users.find({}, {fields: {"emails": 1, "roles": 1, "profile": 1}});
});
于 2016-02-06T17:34:15.360 回答