延迟回调中的异常:Error:当modifier选项为true时,验证对象必须至少有一个操作符



我试图添加角色包,然后设置自定义用户角色,如客人或成员,所以我可以使用它与付费计划。我得到以下错误

Exception in defer callback: Error: When the modifier option is true, validation object must have at least one operator
at checkModifier (packages/aldeed:simple-schema/simple-schema-validation.js:271:1)
at doValidation1 (packages/aldeed:simple-schema/simple-schema-validation.js:321:1)

当我运行以下函数

Meteor.methods({
    setUserRole: function(userId, roleToSet){
        // check(Meteor.userId(), String);
        check(userId, String );
        check(roleToSet, String);
        var user = Meteor.users.findOne(userId);
        if (_.isEmpty(user.roles)) {
            Roles.addUsersToRoles(userId, roleToSet);
        }
    }
});

这通常意味着您正在尝试$set尚未添加到模式中的字段。

如果您正在使用Telescope,请确保为Roles包所需的任何字段调用Users.addField()

当您将模式应用于Users集合时,就会发生这种情况。

有两种类型的角色可以应用:

  roles: {
      type: Object,
      optional: true,
      blackbox: true
  },

  roles: {
      type: [String],
      optional: true
  }

你不能同时使用两者。在您的案例中,由于您没有在Roles.addUsersToRoles(userId, roleToSet);中使用,因此您需要第二个角色模式定义示例。

请注意,如果不更改方案,您将无法使用组

这个错误是由simple-schema抛出的,它意味着使用一个没有操作符的修饰符($set, $unset, ..)来使用更新方法。等等)。最新版本的角色包似乎在与角色相关的代码中避免了这个问题。addUsersToRoles,但是如果在注释使用addUsersToRoles方法的行时错误消失,那么可能需要

  1. 确保您使用的是最新版本的角色包或使用:

    meteor update alanning:roles 
    
  2. 检查调用此方法的代码并确保参数正确且顺序正确

  3. 确保你没有混合分组模型和非分组模型(当使用角色包时,你应该选择是否总是使用组或从不使用它们)。例如:

     Roles.addUsersToRoles(userId, roles, Roles.GLOBAL_GROUP)
    

最新更新