node.js, мангуст — найди({ _id: req.params.id }) не работает

#node.js #mongodb

Вопрос:

Я выполняю это упражнение https://openclassrooms.com/fr/courses/6390246-passez-au-full-stack-avec-node-js-express-et-mongodb/exercises/3732

Функция findOne() не работает:

 app.get('/api/products/:id', (req, res, next) => {  
  console.log('Product.findOne({ id:' req.params.id '}) :' );
  Product.findOne({ _id: req.params.id })  
    .then(product  => { console.log("nprod =n" json({product})); res.status(200).json({product})} ) 
    .catch(error   => { console.log('error here');                 res.status(404).json({ error })} );
});
 

Мой серверный сервер отображается в терминале:
введите описание изображения здесь

Два других маршрута работают правильно: введите описание изображения здесь

Элементы действительно находятся в базе данных: введите описание изображения здесь

Я попытался заменить findOne() на findById(). Я новичок и изо всех сил старался найти решение, но это не помогает.

Ответ №1:

Проблема

Вы пытаетесь сравнить строку с ObjectId

Решение

https://docs.mongodb.com/manual/reference/method/ObjectId/

 const ObjectId = require('mongodb').ObjectId;
const id = ObjectId(req.params.id); // convert to ObjectId
Product.findOne({ _id: id })  
 

Комментарии:

1. Большое вам спасибо, это ничего не меняет. Я не вижу, могу ли я прикрепить asnap shop к своим комментариям, но он дает точно такой же ответ.

Ответ №2:

Вы можете сделать что-то подобное, чтобы это сработало.

 app.get('/api/products/:id', (req, res, next) => {  
  Product.findOne({_id: req.params.id })
  .then(product => {
     console.log(product) //To check the value we got from query
     res.status(200).json({product})
  })
.catch(err => {
   console.log(err)
})
});
 

Комментарии:

1. Спасибо вам большое, это показывает правильный результат в console.log(результат)//, Чтобы проверить значение, которое мы получили из запроса, но программа все еще не работает

2. каков ваш ожидаемый результат??

3. я обновил оду один раз, попробуйте с этим

4. @ChessClub не могли бы вы, пожалуйста, проголосовать и отметить это