Meteor publication异常:在使用aldeed:tabular时,没有检查发布者期间的所有参数

时间:2016-02-06 17:25:50

标签: javascript meteor tabular meteor-publications

我有以下出版物:

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'

是什么导致这种情况?

1 个答案:

答案 0 :(得分:0)

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

aldeed:tabular 包中实施的反应式DataTable将参数tableNameidsfields传递给发布函数;这就是抛出异常的原因。

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

  

你的职能:

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

这应该可以解决错误:

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}});
});