#javascript #arrays #database #mongodb #mongoose
Вопрос:
Моя цель-вернуть один объект продукта в зависимости от идентификатора продукта, который я отметил зеленым цветом (из всего массива продуктов в моей базе данных mongo).
Моя внутренняя запись выглядит следующим образом:
router.get("/:id", async (req, res)=> {
const mid=req.params.id;
console.log(mid)
const products = await Product.findOne({ id: mid })
console.log(products)
if (products) {
res.send(products);
} else {
res.status(404).send({message:"product not found"})
}
});
Connsole.log(mid)
в третьей строке работает, и он возвращает правильный идентификатор. Однако, когда я пытаюсь отфильтровать этот один массив в зависимости от значения в третьей строке, я всегда возвращаю первый объект моей базы данных, которым является камера gopro, вместо нужного объекта.
Вывод выглядит следующим образом:
632834528
{
_id: '5f9849daf641a82b257d529b',
id: 3484,
agentId: 66343,
title: 'GoPro Camera',
slug: 'gopro',
Что я делаю не так?
Я тоже пытался const products = await Product.find({ id: mid })
, но это возвращает мне весь массив, а не только один объект.
Ответ №1:
Я думаю, что он возвращает запрос. Попробуй:
const products = await Product.findOne({ id: mid }).exec();
Комментарии:
1. Это тоже сработало!
2. Как вы думаете, какое решение лучше (ваше или мое ниже?) и почему?
3. Я не думаю, что вам вообще нужен expressAsyncHandler. Немного странно, что это вообще решило вашу проблему в первую очередь
Ответ №2:
Это решение сработало для меня: я должен использовать Expressasynchandler следующим образом:
Редактировать: Это решение может быть не лучшим (см. Комментарии к ответу выше).
router.get("/:id", expressAsyncHandler(async (req, res) => {
const mid=req.params.id;
const products = await Product.findOne({ id: mid })
if (products) {
res.send([products]);
} else {
res.status(404).send({message:"product not found"})
}
}));