#javascript #express
Вопрос:
Новичок здесь, и я не понимаю, почему я получаю ошибку максимального стека вызовов:
app.post('/farms/:id/products', async (req, res) => {
const { id } = req.params;
const farm = await Farm.findById(id);
const { name, price, category } = req.body;
const newProduct = new Product({ name, price, category });
newProduct.farm = farm;
farm.products.push(newProduct);
res.send(farm)
})
Я заметил, что если я переключусь на это, я больше не получу ошибку. Однако я не понимаю, почему это сработает.
farm.products.push(newProduct);
newProduct.farm = farm;
Вот как я определил схему продукта:
const productSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
price: {
type: Number,
required: true,
min: 0
},
category: {
type: String,
lowercase: true,
enum: ['fruit', 'vegetable', 'dairy']
},
farm: {
type: Schema.Types.ObjectId,
ref: 'Farm'
}
})
const Product = mongoose.model('Product', productSchema);
Вот как я определил схему фермы:
const farmSchema = new mongoose.Schema({
name: {
type: String,
required: [true, 'Farm must have a name!']
},
city: {
type: String
},
email: {
type: String,
require: [true, 'Email is required!']
},
products: [{
type: Schema.Types.ObjectId,
ref: 'Product'
}]
})
const Farm = mongoose.model('Farm', farmSchema);
Комментарии:
1. Если вы проверите трассировку стека, когда произойдет ошибка, вы сможете увидеть, где она попадает в цикл рекурсии.
2. Есть ли в
Product
классеfarm
задатчик для свойства? Я подозреваю, что проблема в этом.3. Вы создали циклическую структуру ссылок, а не то, что будет сериализовано.. например,
var a = {hello: 'hello'}; a.a = a; JSON.stringify(a)
не удастся4. @Кит, почему бы изменить порядок нажатия и назначения, чтобы исправить это?
5. @Keith Я думаю, что это должно вызвать другую ошибку в отношении циклических объектов.