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
из моей модели.