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

客户端更新MongoDB数据库时QuizID返回undefined问题排查

编辑测验后QuizID返回undefined的问题修复

问题根源

  1. POST路由ID获取方式错误:/completeEdit路由没有定义:id路径参数,你用req.params.id必然拿到undefined——表单的ID是通过hidden字段提交的,应该从req.body.id获取。
  2. EJS中ID字段可能不匹配:MongoDB文档默认主键是_id,虽然Mongoose会生成虚拟id属性,但直接用quiz._id更稳妥。
  3. 表单标签未闭合:EJS代码里的<form标签最后缺少闭合符号,会导致表单提交异常。

修改后的代码

app.js POST路由部分

app.post("/completeEdit", async function (req, res) {
    // 从表单提交的body中获取ID
    const quizId = req.body.id; 
    const editedQuestion = req.body.editQuestion;
    const editedAnswer = req.body.editAnswer;

    console.log(editedQuestion, editedAnswer, quizId)

    try {
        const updatedResult = await Quiz.findByIdAndUpdate(
            quizId,
            {
                question: editedQuestion,
                answer: editedAnswer
            },
            { new: true }
        );
        if (updatedResult) {
            console.log("Quiz updated:", updatedResult);
            res.redirect('/');
        } else {
            console.log("Quiz not found.", quizId);
            res.redirect('/');
        }
    } catch (error) {
        console.log(error);
        res.redirect('/');
    }
});

编辑页EJS代码

<h1>Make An Edit</h1>
<form action="/completeEdit" method="post">
    <div class="edit-window-content">
      <label>Question</label>
      <input class="question-edit-box" type="text" name="editQuestion" placeholder="Edit question" value="<%= quiz.question %>">

      <label>Answer</label>
      <textarea class="answer-edit-box" name="editAnswer" rows="4" cols="30" placeholder="Edit answer"><%= quiz.answer %></textarea>
      
      <!-- 使用MongoDB原生的_id字段 -->
      <input type="hidden" name="id" value="<%= quiz._id %>">
      <button class="overlay-close" type="submit" name="button">Done</button>
    </div>
</form> <!-- 修复闭合标签 -->

额外优化点

  • 去掉了嵌套的updateDocument函数,直接在路由处理函数中使用async/await,逻辑更清晰,避免潜在的回调问题。
  • 新增了quizId的日志输出,方便调试时确认ID是否正确传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:56:23