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

Ajax请求Node.js+Express后端时参数值为NULL的问题

问题解决:POST请求参数后端获取为NULL导致数据库插入错误

核心问题分析

  1. 请求参数获取方式错误:req.query用于获取URL查询参数(如?key=value格式),而POST请求的表单数据存储在请求体中,需通过req.body获取。
  2. Express未配置请求体解析中间件:默认情况下Express不会自动解析POST请求的请求体,导致req.body为空。
  3. 字段名不匹配:前端传递的字段是job_title,后端代码中误用data.job,会导致该字段值为undefined,最终插入数据库为NULL。

解决方案步骤

1. 添加Express请求体解析中间件

在你的Express主文件(如app.js)中添加以下代码,用于解析x-www-form-urlencoded格式的请求体(jQuery的$.post默认使用该格式):

const express = require('express');
const app = express();

// 解析x-www-form-urlencoded格式的请求体
app.use(express.urlencoded({ extended: true }));

2. 修改后端路由代码,正确获取参数并匹配字段名

将路由中的req.query改为req.body,并修正字段名对应关系:

app.post("/user/add", (req, res) => {
  // 从请求体中获取POST参数
  const data = req.body;
  var sql =
    "Insert into users (first_name,last_name,email,password,job,security,mobile,remarks) values (?,?,?,?,?,?,?,?)";
  conn.query(
    sql,
    [
      data.first_name,
      data.last_name,
      data.email,
      data.password,
      data.job_title, // 对应前端的job_title字段
      data.security,
      data.mobile,
      data.remarks,
    ],
    function (err, result) {
      if (err) {
        res.send(err);
      } else {
        res.send("1 record inserted");
      }
    }
  );
});

验证修改

  1. 重启Express服务。
  2. 前端重新发送请求,此时后端可以正确获取到所有参数,数据库插入操作不会再触发ER_BAD_NULL_ERROR错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:25:17