Product.find ({category: req.params.category}) не работает - PullRequest
1 голос
/ 15 марта 2020

Теперь в схеме продукта у меня есть такая категория:

        "_id" : ObjectId("5e6dfde62764a11b34ccc9a3"),
        "title" : "t-shirt",
        "price" : 12,
        "category" : "T-shirts",
        "description" : "<p>tshirts description goes here</p>\r\n",
        "images" : [ ],
        "__v" : 0

, и мой маршрут такой:


router.get('/category/:category', function(req, res){
    var categorySlug = req.params.category;
    Category.findOne({slug: categorySlug}, function(err, category){
        if(err){
            console.log(err);
        } else {
            Product.find({category: categorySlug}, function(err, products){
                if(err){
                    console.log(err);
                } else {
                    console.log(category)
                    console.log(products)
                    res.render('client/cat_product', {products, category, title: products.title});
                }
            })
        }

    })
})

Проблема в том, когда я утешаюсь. log (category) отображает категорию нормально, но когда я console.log (products) выдает пустой массив без продуктов

это модели схемы для категории и продукта:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const CategorySchema = new Schema({
    title: {
        type: String,
        required: true
    },
    slug: String,
    products: [
        {
            type: Schema.Types.ObjectId,
            ref: 'Product'
        }
    ]

});

const Category = mongoose.model('Category', CategorySchema);
module.exports = Category;

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const ProductSchema = new Schema({
    title: {
        type: String,
        required: true
    },
    description: {
        type: String,
        required: true
    },
    category: {
        type: String,
        required: true
    },
    price: {
        type: Number,
        required: true
    },
    images: [
        {
            url: String,
            public_id: String
        }
    ]
});


module.exports = mongoose.model('Product', ProductSchema);

1 Ответ

0 голосов
/ 15 марта 2020

Я полагаю, что это решение может работать, если нет, пожалуйста, дайте мне знать, что вы видите в качестве вывода. Мне удалось протестировать решение по простой задаче, которую я создал, но я не имею представления относительно ваших деталей, ваш вопрос не оставляет его ясным, и вы не предоставили дополнительную информацию.

router.get("/category/:category", function(req, res) {
  var categorySlug = req.params.category;
  res.send(
    res.render("client/cat_product", {
      products: await Product.find({ category: categorySlug }) ,
      category: await Category.findOne({ slug: categorySlug }) ,
      title: await await Product.find({ category: categorySlug }).select("title")
    })
  );
});

Если у вас есть несколько продуктов, начиная с Category.findOne, вам может потребоваться сделать что-то вроде Category.findOne().populate("products").

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...