MongoDB驱动移除回调后,如何修复删除接口的Cannot DELETE错误?
问题修复方案
核心问题分析
- 路由配置错误:
Cannot DELETE /posts/(id)说明请求路径或后端路由未正确配置动态参数。正确的路由规则应为DELETE /posts/:id,请求时需替换为实际帖子ID(比如/posts/60d21b4667d0d8992e610c85,路径中不能带括号)。 - 回调用法过时:当前代码混用async/await与回调模式,Mongoose已不再推荐回调写法,且外层try/catch无法捕获回调内的错误。
修复后的代码
export const remove = async (req, res) => { try { const postId = req.params.id; // 改用async/await调用,移除回调 const deletedPost = await PostModel.findOneAndDelete({ _id: postId }); if (!deletedPost) { return res.status(404).json({ message: "Post was not found", }); } res.json({ success: true }); } catch (err) { console.log(err); // 修正错误文案,匹配删除操作场景 res.status(500).json({ message: "Failed to delete post", }); } };
关键修改点
- 移除
findOneAndDelete的回调参数,改用await获取返回结果,让错误能被外层try/catch统一捕获 - 修正catch块中的错误提示文案(原文案为"获取帖子失败",与删除操作不匹配)
- 确保后端路由配置正确(以Express为例):
// Express路由配置示例 app.delete('/posts/:id', remove);
额外验证步骤
- 确认Postman请求方法为DELETE,路径为
/posts/实际帖子ID,无多余括号 - 在函数开头添加
console.log(postId),验证req.params.id是否正确获取到值 - 确认
PostModel的Schema中_id为默认ObjectId类型,与传入的ID格式匹配
内容的提问来源于stack exchange,提问作者Goering Novorozzov
相关产品推荐
相关产品推荐

