Mongoose Object Array не будет работать на почтальоне - PullRequest
1 голос
/ 16 апреля 2019

После завершения курса по MEAN Stack я работаю над созданием собственного веб-приложения - страницы рецептов. Я разработал свои модели, но когда я пытаюсь заполнить базу данных новым рецептом, это просто не сработает. Основная проблема заключается в том, как я хочу хранить ингредиенты, они будут храниться на одной из таблиц, тогда у каждого рецепта есть свой список ингредиентов и количества для каждого. Например, чтобы приготовить тост, скажем, «50 г сливочного масла и 4 ломтика хлеба». Это схема, которую я использую:

var RecipeSchema = Schema({
    name: String,
    desc: String,
    author: { type: Schema.ObjectId, ref: 'User' },
    category: { type: Schema.ObjectId, ref: 'Category' },
    ingredients: [{ amount: String, ingredient: { type: Schema.ObjectId, ref: 'Ingredient' }}],
    steps: [String],
    image: String,
    thumbnail: String,
    portions: Number,
    difficulty: Number,
    cookingTime: Number,
    comment: String
});

Когда я захожу в Почтальон и пытаюсь заполнить запись «Рецепт тоста», у меня появляется следующее:

name:Toast
desc:Toast is a common breakfast staple.
author:5cad791a7b2e651f7803f5de
category:5cb1ff8f484a172984178a97
ingredients:[{"amount": "4 slices", "ingredient": "5cb1ffdb484a172984178a98"}, {"amount": "35 grs.", "ingredient": "5cb2000d484a172984178a99"}]
steps:['Toast the bread in the oven.','Spread some butter on each toast.']
image:'null'
thumbnail:'null'
portions:1
difficulty:1
cookingTime:15
comment:'null'

Но я продолжаю получать ошибку "Cast Array". В чем может быть проблема? Это проблема с моей моделью, с Почтальоном или с тем, как я отправляю Массив?

EDIT:

Очевидно, это была проблема с тем, как я размещал свои массивы в Postman. После нескольких тестов мне удалось загрузить полный рецепт в формате JSON. Структура правильная (но то, что предлагает Хуан, также может быть использовано, чтобы сделать код чище).

1 Ответ

1 голос
/ 16 апреля 2019

Я не совсем уверен, но когда я работал с мангустом, у внутренних объектов был новый объект Schema внутри, в данном случае это было бы для ингредиентов

const IngredientSchema = new Schema({ 
    amount: String, 
    ingredient: { type: Schema.ObjectId, ref:'Ingredient' }
});

const RecipeSchema = new Schema({
    name: String,
    desc: String,
    author: { type: Schema.ObjectId, ref: 'User' },
    category: { type: Schema.ObjectId, ref: 'Category' },
    ingredients: [ IngredientSchema ],
    steps: [String],
    image: String,
    thumbnail: String,
    portions: Number,
    difficulty: Number,
    cookingTime: Number,
    comment: String
});
...