Exception en invoquant la méthode « users.insert » Erreur: erreur Match: tableau attendu, obtenu « admin » dans le champ [0] .roles Lecture des métadonnées de projet

voix
1

J'essaie d'insérer la collecte de l' utilisateur , mais obtenir l'erreur ci - dessus. Est - il un moyen de rendre l' entrée d'un champ dans un tableau. Il est attend un tableau , mais j'entrer admindans le mon champ de rôle. Comment puis - je insérer les rôles dans un tableau de l'interface utilisateur?

Ceci est la Server side, je définir tous les champs qui doivent être insérés.

Meteor.methods({
  users.insert(users) {
    check(users, [
      {
        email: String,
        password: String,
        username: String,
        profile: {
          name: { firstname: String, lastname: String },
          phone: String
        },
        roles: [String]
      }
    ]);

    users.forEach(({ email, password, username, profile, roles }) => {
      const userExists = Accounts.findUserByEmail(email);

      if (!userExists) {
        const userId = Accounts.createUser({
          email,
          password,
          username,
          profile
        });
        Roles.addUsersToRoles(userId, roles, default-group);
      }
    });
  }
});

Le Client side, état initial et appel météore

this.state = {
      phone: ,
      email: ,
      password: ,
      username: ,
      roles: []
    };

onSubmit(e) {
    e.preventDefault();

    const {
      phone,
      email,
      password,
      username,
      roles
    } = this.state;

    const user = [
      {
        email,
        password,
        username,
        profile: {
          name: { firstname, lastname },
          phone,
        },
        roles
      }
    ];

    this.props.createUser(users.insert, user);
  }

La Submission Form, je l' insertion des valeurs ici

<form
          onSubmit={this.onSubmit.bind(this)}
          noValidate
          className=boxed-view__form
        >
          <input
            className=editor__title editor__title--border
            type=tel
            name=phone
            placeholder=Contact
            value={this.state.phone}
            onChange={this.onChange}
          />
          <input
            className=editor__title
            type=email
            name=email
            placeholder=Email
            value={this.state.email}
            onChange={this.onChange}
          />
          <input
            className=editor__title
            type=password
            name=password
            placeholder=Password
            value={this.state.password}
            onChange={this.onChange}
          />
          <input
            className=editor__title
            type=text
            name=username
            placeholder=username
            value={this.state.username}
            onChange={this.onChange}
          />
          <input
            className=editor__title
            type=text
            name=roles
            placeholder=Roles
            value={!this.state.roles}
            onChange={this.onChange}
          />
          <button className=button>Create Account</button>
        </form>
Créé 07/11/2018 à 20:08
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
2

Bien que vous INITIALISATION les rôles en tant que tableau dans votre état, vous surchargez quand vous tapez dans l'entrée et de la transformer en une chaîne.

Pour commencer roles=[]

Dans votre onChangefonction que vous définissez le rolesdans votre état d'être la chaîne admin.

Nous allons changer l'objet utilisateur de créer un peu de sorte qu'au lieu de pousser une chaîne, il poussera un tableau de tous les mots que vous tapez dans l'entrée de sorte que vous pouvez taper plus d'un rôle et ils seront tous appliqués

Voici le code qui le fera:

roles.split(' ')

Qu'est-ce que cela ne se prend chaque mot dans la chaîne que vous passez et en fait un élément dans un tableau.

admin devient ["admin"]

admin superuser devient ["admin", "superuser"]

Voici le code modifié qui devrait fonctionner pour vous.

onSubmit(e) {
    e.preventDefault();

    const {
      phone,
      email,
      password,
      username,
      roles
    } = this.state;

    const user = [
      {
        email,
        password,
        username,
        profile: {
          name: { firstname, lastname },
          phone,
        },
        roles: roles.split(' '),
      }
    ];

    this.props.createUser("users.insert", user);
}
Créé 07/11/2018 à 21:27
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more