Я новичок в Node.js и работаю над проектом электронной коммерции, где у меня есть две разные модели для продукта и изображения .
продукт. js модель
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const productSchema = new Schema({
title: {
type: String,
required: true
},
price: {
type: Number,
required: true
},
description: {
type: String,
required: true
},
userId: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
}
});
module.exports = mongoose.model('Product', productSchema);
изображение. js модель
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const imageSchema = new Schema({
imageUrl: {
type: String,
required: true
},
productId: {
type: Schema.Types.ObjectId,
ref: 'Product',
required: true
}
});
module.exports = mongoose.model('Image', imageSchema);
при изображение. js модель, есть несколько изображений одного продукта. После сохранения изображений и продуктов я хочу показать одно изображение продукта среди нескольких изображений. Вот мой контроллер
exports.getProducts = (req, res, next) => {
let imagesArr = [];
Product.find({ userId: req.user._id })
.then(products => {
for (product of products){
Image.find({productId: product._id})
.then(images => {
imagesArr.push(images[0]);
})
.catch(err => {
console.log(err);
});
}
console.log("Choosed Images", imagesArr);
})
.then(result => {
return res.render('admin/products', {
pageTitle: 'Admin Product',
path: '/admin/products',
editing: editMode,
product: product,
images:imagesArr,
hasError: false,
errorMessage: null,
validationErrors: []
});
})
.catch(err => {
const error = new Error(err);
error.httpStatusCode = 500;
return next(error);
});
};
К сожалению, imageArr становится нулевым. Я понял, что из-за асинхронности становится нулевым. Пожалуйста, предложите мне, как я могу это реализовать. Я новичок в Nodejs