Mongoose: требуется путь проверки достоверности

Я пытаюсь сохранить новый документ в mongodb с помощью mongoose, но я получаю ValidationError: Path 'email' is required., Path 'passwordHash' is required., Path 'username' is required., хотя я поставляю электронную почту, passwordHash и имя пользователя.

Вот схема пользователя.

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

Вот как я создаю и сохраняю пользовательский объект.

    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 send back the user id. */

    }
  });

Итак, почему mongoose возвращает ошибку проверки, не могу ли я использовать null как временное значение?

Ответ 1

В ответ на ваш последний комментарий.

Вы правы, что null - это тип значения, но нулевые типы - это способ сообщить интерпретатору, что он не имеет значения. поэтому вы должны установить значения для любого непустого значения или получить ошибку. в вашем случае установите эти значения для пустых строк. то есть.

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

Ответ 2

Ну, вот как я избавился от ошибок. У меня была следующая схема:

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

и мой терминал бросил мне следующий журнал, а затем перешел в бесконечную перезагрузку при вызове моей функции регистрации:

(node: 6676) UnhandledPromiseRejectionWarning: необработанное обещание Отказ (идентификатор отклонения: 1): ValidationError: password: Path password требуется., email: Неверный адрес электронной почты.

(node: 6676) [DEP0018] Устаревшее предупреждение: отказ от необработанных обещаний устарели. В будущем обещайте отклонения, которые не обрабатываются завершит процесс Node.js с ненулевым кодом выхода.

Итак, поскольку он сказал, что пароль "Пароль" требуется, я прокомментировал строку required:true из моей модели и validate:email из моей модели.