我正在尝试用mongodb和nodejs制作一个应用程序。我做了一个特殊的路由,它有:id
参数,并且运行良好。
我还做了另一个get路线,它有product/:category
。每次我收到该错误时向该路由发送请求时:
CastError: Cast to ObjectId failed for value "(here is my req.params.category)" at path "_id" for model "Product"
我的路线是:
// product is my model I called it in top of the file
app.get('product/:category', async (req, res)=>{
const productByCategory = await product.find({category: req.params.category});
res.json(productByCategory);
});
当我向上面的路由发出get请求时,我得到了该错误:
CastError: Cast to ObjectId failed for value "(here is my req.params.category)" at path "_id" for model "Product"
我的产品模型是:
const ProductSchema = new mongoose.Schema({
title:{
type: String,
required: true
},
description:{
type: String,
min: 40,
required: true
},
category:{
type: String,
required: true
},
price:{
type: Number,
required: true
},
imageUrl:{
type: String,
required: true
},
quantity:{
type: Number,
required: true
},
comments: [{
type: Object
}],
seller: {
sellerId:{
type: String,
required: true
},
username:{
type: String,
required: true
},
shopName:{
type: String,
required: true
},
category:{
type: String,
required: true
}
},
location: {
type: "String",
required: true
},
date:{
type: Date,
default: Date.now
}
});
我怎样才能解决这个问题?
product/:_id
和product/:category
在路由上下文中是“相同的”。。。所以,即使您发送product/:category
请求,服务器也会计算匹配的第一个endpoint。
解决方案一:让每条路线都独一无二。
// _id
app.get('product/_id/:_id', async (req, res)=>{
const productById = await product.find({_id: req.params._id});
res.json(productById);
});
// category
app.get('product/category/:category', async (req, res)=>{
const productByCategory = await product.find({category: req.params.category});
res.json(productByCategory);
});
...
解决方案二:使用request.body
app.post('product', async (req, res)=>{
const product = await product.find(req.body});
res.json(product);
});
注意:注意非关系型数据库注入。
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/NoSQL注射
我正在开发一个节点应用程序。在我添加之前,所有的路线似乎都在运行 当我注释掉id路由时,新路由按预期工作。但是当它在那里的时候,我试着在: 我得到以下错误: (节点:17216)未经处理的PromisejectionWarning:CastError:在模型“Client”的路径“\u id”处对值“new”进行转换到ObjectId失败 这是我的模式: 我似乎找不到这里的问题,任何帮助都将不胜感
我的应用程序可以在本地工作,但在生产中,我似乎无法使用猫鼬从mongo获取特定的东西。我尝试过:
我正在用node/express/mongo/mongoose构建一个应用程序。我遇到了一个我似乎无法理解的错误,谷歌搜索到目前为止没有任何帮助。 我创建了一个简单的、以猫为主题的示例来重现我遇到的错误。我基本上是通过ObjectId检索一个对象。我正在使用创建对象时自动生成的对象id(作为字符串)。 当我导航到路径localhost:3000/kitty/586d62878fc14d30e0ac
好吧,我看到这里有一些这样的帖子,但他们没有帮助我。。。 让我描述一下我的问题: 我有两个模式 现在我已经有了一个B对象,我想创建一个a对象。 所以我这样做: b对象是从我的monogDB加载的。调试器为我的b显示了一个有效的ObjectId(53627ed535d9d04416e26218或Sb~Õ5ÙÐDáb)。 但是,当我保存新的A-Object时,会出现错误:“CastError:Cast
我的控制器obter_todos_precos只是一个console.log,没有使用任何模型,但我得到以下错误: 为什么我会有这种行为?
嘿,伙计们真的需要一些关于删除路由的帮助。我正在使用RESTful路由,尝试遵循约定,添加删除路由时,我得到错误: CastError:模型"Blog"的路径"_id"处的值"X"转换为ObjectId失败 我已经在stackoverflow上搜索了这个问题,我能想到的最好的版本是猫鼬有一个错误。我把它回滚到V4.10.0,仍然在处理这个问题。我的代码如下: