Mongoose findOneAndDelete重复调用仍返回成功问题排查与修复
删除用户API重复调用响应异常的修复方案
你的问题出在对findOneAndDelete方法的返回值判断逻辑错误:
- 当调用
findOneAndDelete未找到匹配文档时,MongoDB不会抛出错误(err依然为null),只会返回null作为查询结果。 - 原代码仅通过
!err判断成功,导致第二次调用时,即便文档已被删除,依然会进入成功分支返回删除提示。
修复后的代码如下:
router.delete('/api/admin/deleteUsers/:id', (req, res, next) => { users.findOneAndDelete({ _id: req.params.id}, function (err, deletedDoc) { if (err) { // 处理数据库操作异常(比如ID格式错误等) return res.status(500).send('Database error'); } if (deletedDoc) { res.send("Id " + req.params.id + " has been deleted"); } else { res.send('Item not found'); } }); });
关键修改点:
- 增加对
deletedDoc的判断:如果该值存在,说明确实删除了匹配的文档;如果为null,则表示无对应文档可删。 - 单独处理数据库操作异常(比如传入的ID格式不符合MongoDB ObjectId规范时,会抛出err),避免将操作异常误判为"未找到条目"。
内容的提问来源于stack exchange,提问作者Chris Stephens
相关产品推荐
相关产品推荐

