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

Node.js POST请求异常排查:候选人信息无法写入MongoDB

Node.js+Express POST请求字段未存入MongoDB排查修复

问题现象

提交候选人信息时,MongoDB Atlas仅生成_id与updated_at字段,name、email、num字段未被正确存储,数据库连接正常。

核心原因

表单设置了enctype="multipart/form-data",但当前表单无文件上传需求,且Express默认的express.urlencoded中间件无法解析该编码格式的请求,导致req.body为空。MongoDB会忽略未定义的字段,仅生成默认的_id和timestamps相关字段。

修复方案

1. 修改表单编码设置

移除addCandidate.ejs表单中的enctype="multipart/form-data"属性,使用默认的application/x-www-form-urlencoded编码,该编码可被已配置的express.urlencoded({ extended: true })中间件正常解析。

修改后的addCandidate.ejs代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <h1>Add Candidate Here</h1>
    <form
      action="/candidate"
      method="post"
      style="
        display: flex;
        flex-direction: column;
        justify-content: center;
        width: 50%;
        gap: 20px;
      "
    >
      <label for="">Name: </label>
      <input
        type="text"
        name="name"
        placeholder="Candidate Name"
      />
      <label for="">Email: </label>
      <input
        type="email"
        name="email"
        placeholder="Candidate Email"
      />
      <label for="">Number: </label>
      <input
        type="number"
        name="num"
        placeholder="Phone no."
      />

      <button type="submit">Add</button>
    </form>
  </body>
</html>

2. (可选)添加请求参数校验

在addCandidate控制器中增加参数校验,提前拦截空数据请求,便于调试:

const addCandidate = (req, res) => {
  console.log(req.body); // 现在能正确输出表单提交的数据
  if (!req.body.name || !req.body.email || !req.body.num) {
    return res.status(400).send("请填写完整的候选人信息");
  }
  const candidate = new Candidate({
    name: req.body.name,
    email: req.body.email,
    num: req.body.num
  });

  candidate.save()
    .then(() => {
        res.redirect("/dashboard");
    })
    .catch((err) => {
      res.status(500).send(err.message + " Sorry, something went wrong.");
    });
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:17:44