Пн goose: ошибка валидации: материалы: сбой приведения к массиву для значения "['glass']" в пути "материалы" - PullRequest
0 голосов
/ 06 апреля 2020

Ниже находится makerSchema

var makerSchema = new mongoose.Schema({
    materials:[{
        material:{
            type: String,
            required:[true, "Material is a required field"],
            trim:true,
            lowercase:true,
            enum:{
                values:['wood','metal','plastic','glass','concrete','other'], 
                message: 'Please choose from the given options only!'
            }
        }
    }]
},{
    timestamps:true
})
var Maker = mongoose.model('Maker', makerSchema);

Я передаю следующие данные через POST-маршрут, но получаю ошибку

{
    "materials":["glass"]
}

Я получаю следующую ошибку

ValidationError: materials: Cast to Array failed for value "[ 'glass' ]" at path "materials"

Как мне исправить эту ошибку и передать массив?

1 Ответ

1 голос
/ 06 апреля 2020

в схеме создателя вы определили массив объектов, а не массив строк, поэтому вам нужно передать массив объектов, каждый объект должен иметь форму

{ material: 'some string' } 

, поэтому вы получил ошибку

, поэтому вам нужно передать массив материалов, как вы определили его в схеме, как это

{
    materials: [{
        material: 'glass'
    }]
}

, или изменить схему маркера на массив строк, подобных этому

var makerSchema = new mongoose.Schema({
    materials: [{
        type: String,
        required: [true, "Material is a required field"],
        trim: true,
        lowercase: true,
        enum: {
            values: ['wood', 'metal', 'plastic', 'glass', 'concrete', 'other'],
            message: 'Please choose from the given options only!'
        }
    }]
}, {
    timestamps: true
})
...