#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 не могли бы вы, пожалуйста, проголосовать и отметить это