Mongodb Mongoose/Express-使用findById()时出现的问题

Mongodb 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

我在MongoDB中有一个活动数据库,所有基本的CRUD操作都运行良好,但现在在开发应用程序前端时,我需要对数据库中的单个活动执行GET请求。我有针对单个活动的工作PUT和DELETE请求,但出于某种原因,GET-one不是在玩球——它返回的是一个对象数组,而不是一个具有该ID的单个对象

我目前正在使用邮递员提出请求,同时解决这个问题。猫鼬版本是5.12.13

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)=>{
谢谢你的回复,我现在又开始运行了!