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

无法定位问题:HTML表单或POST路由处理器致数据无法提交至MongoDB

问题排查与修复方案

1. HTML表单核心错误(导致req.body无数据)

你的表单标签错误地写了两个action属性,第二个本该是指定提交方法的method="POST"。表单提交的HTTP方法是通过method属性定义的,而非重复写action。默认不指定method时,表单会用GET方法提交,数据会拼在URL里,不会进入请求体,自然拿不到req.body数据。

修复后的survey.ejs表单代码:

<form action="/survey" method="POST" id="survey-form">
    <select name="service" id="service" required>
        <option value="" disabled selected hidden>Type to search </option>
        <option value="option1">option1</option>
        <option value="option2">option2</option>
        <option value="option3">option3</option>
    </select>
    <br>
    <button type="submit">Submit</button>
</form>

(顺便把form的id改成survey-form,避免和select的id重复,符合HTML唯一ID规范)

2. 路由代码语法错误(导致MongoDB插入失败)

调用insertMany时误用了方括号[],方法调用必须用圆括号(),这是基础语法错误。

修复后的routes/survey.js代码:

router.post('/', async(req, res) => {
    console.log('Before try catch statement')
    console.log(req.body) // 可以加这行确认是否拿到数据
    try{
        const data={
            service: req.body.service
        }
        await Survey.insertMany(data) // 把[]改成()
        res.render('index')
    }catch (e){
        console.log(e)
    }
})

3. 额外验证点

  • 你已正确挂载express.urlencoded中间件app.use(express.urlencoded({ extended: false})),这部分无需修改。
  • 建议在路由里先打印req.body,确认数据正常接收后,再执行数据库插入操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:33:16