嗨,我是新的mongodb,我有这个错误来当我击中这个端点localhost:3000/api/v1/tours/1
错误消息
{
"status": "failure",
"message": "Cast to ObjectId failed for value \"1\" (type string) at path \"_id\" for model \"Tour\""
}
字符串
Error image
exports.getTour = async (req, res) => {
try {
const tour = await Tour.findById(req.params.id);
res.status(200).json({
status: 'success',
data: {
tour
}
});
} catch (err) {
res.status(404).json({
status: 'failure',
message: err.message
});
}
};
型
这是应该给我给予具有特定id的旅游数据的函数。
我在这里附加架构
const mongoose = require('mongoose');
const tourSchema = new mongoose.Schema({
name: {
type: String,
required: [true, 'A tour must have a name'],
unique: true
},
rating: {
type: Number,
default: 4.5
},
price: {
type: Number,
required: [true, 'A tour must have a price']
}
});
const Tour = mongoose.model('Tour', tourSchema);
型
以下是atlas数据库mongoose data中的数据
2条答案
按热度按时间7nbnzgx91#
当您向以下对象发出
GET
请求时:字符串
您的代码正在抓取
req.params.id
,即1
。由于您将其用作findById()
的参数,mongoose试图将1
转换为ObjectId
,以便它可以找到文档。首先,1
不能转换为ObjectId
,其次,您没有带有_id === 1
的文档。我认为你需要请求的路线是:
型
bweufnob2#
我可以从this图像中看到
65756e8badeb705e68Te7aa9
,这是您创建的Tour数据的数据ID。MongoDb使用
uuid
来创建12字节的随机id,所以你必须传递65756e8badeb705e68Te7aa9
作为id来从mongoDb集合中获取数据。