Mongodb Mongoose/Express-使用findById()时出现的问题
我在MongoDB中有一个活动数据库,所有基本的CRUD操作都运行良好,但现在在开发应用程序前端时,我需要对数据库中的单个活动执行GET请求。我有针对单个活动的工作PUT和DELETE请求,但出于某种原因,GET-one不是在玩球——它返回的是一个对象数组,而不是一个具有该ID的单个对象 我目前正在使用邮递员提出请求,同时解决这个问题。猫鼬版本是5.12.13Mongodb Mongoose/Express-使用findById()时出现的问题,mongodb,express,mongoose,Mongodb,Express,Mongoose,我在MongoDB中有一个活动数据库,所有基本的CRUD操作都运行良好,但现在在开发应用程序前端时,我需要对数据库中的单个活动执行GET请求。我有针对单个活动的工作PUT和DELETE请求,但出于某种原因,GET-one不是在玩球——它返回的是一个对象数组,而不是一个具有该ID的单个对象 我目前正在使用邮递员提出请求,同时解决这个问题。猫鼬版本是5.12.13 router.get('/:id', async (req, res) => { try { const activity
router.get('/:id', async (req, res) => {
try {
const activity = await Activities.findById(req.params.id)
res.json(activity).send()
} catch (error) {
res.send(error.message)
}
})
然后用邮递员提出请求http://localhost:5000/api/activities?id=60968e3369052d084cb6abbf (此处的id只是我从数据库中的一个条目复制粘贴的id,用于故障排除)
我真的被这个难住了,因为我不明白为什么它不起作用!我在Postman中得到的响应是一个对象数组,如我所说,它似乎是数据库的全部内容,而不仅仅是一个具有查询ID的内容。尝试在findById上调用exec,findById返回一个查询,您需要调用exec来执行查询 如果不调用exec函数,“activity”变量就是mongoose查询对象
router.get('/:id', async (req, res) => {
try {
const activity = await Activities.findById(req.params.id).exec();
res.json(activity).send()
} catch (error) {
res.send(error.message)
}
});
findById的文档
编辑:
正如Dang正确发现的,鉴于您的代码正在检查req.params,您调用的URL需要更新:
http://localhost:5000/api/activities/60968e3369052d084cb6abbf
http://localhost:5000/api/activities?id=60968e3369052d084cb6abbf
应该是http://localhost:5000/api/activities/60968e3369052d084cb6abbf
?因为路由是router.get('/:id',async(req,res)=>{
谢谢你的回复,我现在又开始运行了!