Недавно я взял Vue.js и Mongoose для разработки личного проекта по отслеживанию количества ингредиентов в наличии в определенной онлайн-игре. Для разных блюд требуются разные ингредиенты. Лотос ...

1
leipzy 20 Дек 2020 в 12:53

1 ответ

Лучший ответ

Быстрые исправления,

  • измените поле ингредиентов схемы питания с объекта на массив,
const foodSchema = new mongoose.Schema(
    {
        foodName: String,
        imagePath: String,
        effect: String,
        onHandQty: Number,
        // correct this to array
        ingredients:  [{
            type: mongoose.Schema.Types.ObjectId,
            ref: 'Ingredient'
        }]
    }
);
  • есть 2 способа вызвать методы мангуста: первый - exec () с обратным вызовом, а второй - без обратного вызова exec (),
  • exec с обратным вызовом, который вы использовали для покупки, необходимо отправить ответ (res.send(food) или res.json(food)) изнутри функции вызова exec,
router.get('/', async(req, res) =>{
    try {
        await FoodItem.find()
            .populate('ingredients')
            .exec(function (err, food) {
                if (err) return handleError(err);
                console.log('The food is %s', food);
                // put response here
                res.json(food);
            });
    } catch (error) {
        res.status(500).json({ message: error.message })
    }
});
  • exec без обратного вызова
router.get('/', async(req, res) =>{
    try {
        const food = await FoodItem.find() 
            .populate('ingredients')
            .exec();
        res.json(food);
    } catch (error) {
        res.status(500).json({ message: error.message })
    }
});
1
turivishal 22 Дек 2020 в 11:52