#node.js #mongodb #express #mongoose
Вопрос:
когда я использовал findById
метод , определенный мангустом, я получил ошибку приведения примерно так
CastError: Cast to ObjectId failed for value "611411089cb0c839083962ba4" (type string) at path "_id" for model "Product"
at model.Query.exec (/home/user/web/mern/emartwell/node_modules/mongoose/lib/query.js:4498:21)
at model.Query.Query.then (/home/user/web/mern/emartwell/node_modules/mongoose/lib/query.js:4592:15)
at processTicksAndRejections (internal/process/task_queues.js:95:5)
Но мне нужно, чтобы продукт не обнаружил ошибку.
маршрут, который я указал, это
http://localhost:5000/api/products/611411089cb0c839083962ba4
Код
productRoute.js
import express from "express";
import asyncHandler from "express-async-handler";
import Product from "../models/productModel.js";
const router = express.Router();
router.get(
"/:id",
asyncHandler(async (req, res) =>
{
const product = await Product.findById(req.params.id);
if (product)
{
res.json(product);
} else
{
res.status(404).send({ message: "Product not found" });
}
})
);
export default router;
Пожалуйста, помогите мне избавиться от этой проблемы.
Заранее спасибо 😀
Ответ №1:
проверьте req.params.id
, правильно ли это .
использовать
Product.findOne({ _id : req.params.id }).
exec((error, product) => {
//what ever you want
})
Маршрут для продуктов
router.get('/getproductById/:id', productController.getProductById_get);
Контроллер продукта
module.exports.getProductById_get = async (req, res) => {
Product.findOne({ _id : req.params.id }).
exec((error, product) => {
if(error) {return res.status(400).json({ error })};
if(product) {
res.status(200).json({ product });
}
})
}
Обновить
import express from "express";
import asyncHandler from "express-async-handler";
import Product from "../models/productModel.js";
const router = express.Router();
router.get(
'/:id',
asyncHandler(async (req, res) =>
{
const product = await
Product.findOne({_id:req.params.id}).
exec((error,product) => {
if (product)
{
res.json({product});
} else
{
res.status(404).send({ message: "Product not found" });
}
})
);
Комментарии:
1. можете ли вы описать работу, лежащую в основе кода
2.
Product.findOne({ _id : req.params.id })
найдет ваш товар по идентификатору иres.status(200).json({ product });
вернет объект товара3. @aravindks Документ mongodb -> > docs.mongodb.com/manual/reference/method/db.collection.findOne
4. @aravindks Я обновляю ответ кодом, использую его и сообщаю мне, если вы получите какую-либо ошибку.