web-dev-qa-db-fra.com

Mangouste: le chemin d'erreur de validation est requis

J'essaie d'enregistrer un nouveau document dans mongodb avec mangouste, mais je reçois ValidationError: Path 'email' is required., Path 'passwordHash' is required., Path 'username' is required. même si je fournis un e-mail, un mot de passe et un nom d'utilisateur.

Voici le schéma utilisateur.

    var userSchema = new schema({
      _id: Number,
      username: { type: String, required: true, unique: true },
      passwordHash: { type: String, required: true },
      email: { type: String, required: true },
      admin: Boolean,
      createdAt: Date,
      updatedAt: Date,
      accountType: String
    });

C'est ainsi que je crée et enregistre l'objet utilisateur.

    var newUser = new user({

      /* We will set the username, email and password field to null because they will be set later. */
      username: null,
      passwordHash: null,
      email: null,
      admin: false

    }, { _id: false });

    /* Save the new user. */
    newUser.save(function(err) {
    if(err) {
      console.log("Can't create new user: %s", err);

    } else {
     /* We succesfully saved the new user, so let's send back the user id. */

    }
  });

Alors pourquoi la mangouste renvoie-t-elle une erreur de validation, ne puis-je pas utiliser null comme valeur temporaire?

15
2trill2spill

En réponse à votre dernier commentaire.

Vous avez raison de dire que null est un type de valeur, mais les types null sont un moyen de dire à l'interpréteur qu'il a pas de valeur. par conséquent, vous devez définir les valeurs sur une valeur non nulle ou vous obtenez l'erreur. dans votre cas, définissez ces valeurs sur des chaînes vides. c'est à dire.

var newUser = new user({

  /* We will set the username, email and password field to null because they will be set later. */
  username: '',
  passwordHash: '',
  email: '',
  admin: false

}, { _id: false });
14
Richard Christensen

Eh bien, la façon suivante est de savoir comment je me suis débarrassé des erreurs. J'avais le schéma suivant:

var userSchema = new Schema({
    name: {
        type: String,
        required: 'Please enter your name',
        trim: true
    },
    email: {
        type: String,
        unique:true,
        required: 'Please enter your email',
        trim: true,
        lowercase:true,
        validate: [{ validator: value => isEmail(value), msg: 'Invalid email.' }]
    },
    password: {
        type: String/
        required: true
    },
    // gender: {
    //     type: String
    // },
    resetPasswordToken:String,
    resetPasswordExpires:Date,
});

et mon terminal me jette le journal suivant, puis est entré en rechargement infini en appelant ma fonction d'enregistrement:

(nœud: 6676) UnhandledPromiseRejectionWarning: Rejet de promesse non géré (id de rejet: 1): ValidationError: mot de passe: le chemin password est requis., e-mail: E-mail non valide.

(nœud: 6676) [DEP0018] DeprecationWarning: les refus de promesse non gérés sont déconseillés. À l'avenir, les refus de promesse qui ne sont pas traités mettront fin au processus Node.js avec un code de sortie différent de zéro.

Donc, comme il est dit que le mot de passe Path est requis, j'ai commenté le required:true ligne hors de mon modèle et validate:email ligne hors de mon modèle.

2
Parikshit Hooda