我有以下出版物:
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'
是什么导致这种情况?
答案 0 :(得分:0)
您收到此错误是因为您需要使用 check(value, pattern)
检查传递给usersadmin
发布功能的参数。
在 aldeed:tabular
包中实施的反应式DataTable将参数tableName
,ids
和fields
传递给发布函数;这就是抛出异常的原因。
根据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}});
});