node.js - 我在 NodeJS mongoose 中的模型“Product”的路径“_id”处的值“shopping-cart”的 Cast to ObjectID failed
问题描述
所以我有一个 /shopping-cart 路线,它工作正常,但如果我添加另一条路线(获取 /:id 的路线),它会给我标题中提到的错误。
这是 /shopping-cart 路线:
router.get("/shopping-cart", (req,res)=>{
if(!req.session.cart) return res.redirect("/");
let xcart= new Cart(req.session.cart);
res.render("shopping-cart", {products: xcart.generateArray(), totalPrice: xcart.totalPrice, qty: xcart.qty, totalQty: xcart.totalQty})
});
现在,上面的这条路线工作正常,但是当我创建另一条路线(下面的代码)时,它给了我标题中提到的错误。这是代码:
router.get("/:id", asyncMiddlewareHandler(async(req,res)=>{
let id= req.params.id;
let pproduct= await Product.findById(id);
console.log(pproduct);
res.render("product",{product:pproduct});
}))
我不明白为什么使用这条路线会导致该路线出错。有人可以帮我解决这个问题吗?谢谢。
解决方案
shopping-cart
string 不能用作查找文档的值,因为findById()
只接受 type 的值ObjectId
。
解决方案:确保req.params.id
始终是文档_id
,否则它会将其视为字符串并抛出错误
虽然查找Product.findById(id)
id 必须是 ObjectId 类型
router.get("/:id", asyncMiddlewareHandler(async(req,res)=>{
let id= req.params.id; // req.params.id = 'shopping-cart'
let pproduct= await Product.findById(id); // accepts _id of type as saved in document for _id
console.log(pproduct);
res.render("product",{product:pproduct});
}))
例子:
/shopping-cart
api 不起作用/5e85ba9c8467e208597bbfc8
会正常工作
推荐阅读
- jenkins - jenkins pod 模板文件在其他阶段不可见
- jquery - JQuery延迟异常:不允许重复参数
- c# - Azure 存储 DownloadToStreamAsync 每次都失败(无一例外)
- primefaces - 如果我想使用新的 ChartJs,如何从 Github 中的源代码构建 6.3-SNAPSHOT
- php - 无法使用 php codeigniter 插入批量记录
- kubernetes - 在 Minikube 上使用 Helm 安装 Istio 失败
- java - 在 Libgdx 上获取鼠标和精灵的坐标
- javascript - Express.js:Passport.ensureAuthenticated() 始终为真
- php - 在 Woocommerce 存档页面中显示特定产品属性
- android - 使用 Firebase 数据加载 RecyclerView 时出现问题(无设置器/字段)