avatar
- это массив
{
nome: {
type: String
},
path: { type: String, required: true }
}
, как определено
avatar: [
{
nome: {
type: String
},
path: { type: String, required: true }
}
],
Также может быть undefined
.
Вы рассматриваете это как объект здесь: this.avatar.name = value
.
Если предполагается, что это всегда будет массив 1, то преобразуйте его в объект:
avatar: {
nome: {
type: String
},
path: { type: String, required: true }
},
и удостоверьтесь, что в вашем виртуальном аккаунте установлена нулевая / неопределенная регистрация. Если вам нужно, чтобы аватар присутствовал всегда, то, если память служит, вы можете сделать аватар схемой и потребовать его.
const AvatarSchema = mongoose.Schema({
nome: {
type: String
},
path: { type: String, required: true }
})
, а затем внутри вашего UserSchema
, вы будете ссылаться на него:
avatar: { type: AvatarSchema, required: true }
В противном случае вам нужно будет обнулить / неопределить проверку:
UserSchema.virtual("url").get(function() {
console.log(this.nome); // I receive right the name
console.log(this.avatar); // I receive undefined
// if avatar is an array then I guess you just want the first one?
let avatarPath;
if(this.avatar && this.avatar.length) {
avatarPath = this.avatar[0].path
}
// ...
return avatarPath ? avatarPath : `http://localhost:300/files/${this.nome}`;
});
Если вы сохраните свою схему как есть и попытаетесь установить путь к аватару, вы сделать что-то вроде этого:
this.avatar = this.avatar || []
this.avatar.push({name: value})
// but it will fail to validate because path is required.
Проверьте документы для понедельник goose поддокатов
Редактировать:
Я забыл упомянуть, что вы в ваш вопрос, вы ссылаетесь на this.avatar.name
, но ваша схема ссылается на nome
, а не name