You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React.js实现博客评论功能报ObjectId转换错误该如何解决

错误根因排查

你碰到的报错本质是React端发起请求时没有正确填充路由参数、请求体字段错误导致的,具体有2个问题:

  • 问题1:请求URL的占位符未替换
    你当前axios请求的路径写死为"/posts/:id/comment",没有把:id替换为实际的帖子ID值,导致后端接收到的req.params.id就是字符串":id",MongoDB自然无法把这个字符串转换成合法的ObjectId,就抛出了你看到的CastError。
  • 问题2:请求体传递了多余的错误字段
    你构造的newComment对象里手动传了_id: postId,这个字段完全多余:Comment的_id是MongoDB创建文档时自动生成的,你不需要手动赋值,而且你把帖子ID赋值给评论ID的逻辑也是完全错误的。

修正后的React端代码

const [commentdescription, setCommentDescription] = useState('')
const [postId, setPostId] = useState()
 
// 提交评论函数
const handleComment = async ()=>{
  // 去掉多余的_id字段,只传接口需要的评论内容和作者ID
  const newComment = {
    author: user._id,
    commentdescription,
  };

  try{
    // 用模板字符串替换路由里的:id为实际的postId值
    await axios.post(`/posts/${postId}/comment`, newComment);
  }catch(err){
    console.log(err)
  }
}

可选的后端代码优化(不影响当前功能运行,仅规范写法)

你当前后端接口里用的Post.findByIdAndUpdate用法不规范,你没有传要更新的内容,只是做了查询操作,建议直接改成Post.findById(req.params.id),语义更清晰。

内容的提问来源于stack exchange,提问作者kinhs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:21:01