Ajax请求Node.js+Express后端时参数值为NULL的问题
问题解决:POST请求参数后端获取为NULL导致数据库插入错误
核心问题分析
- 请求参数获取方式错误:
req.query用于获取URL查询参数(如?key=value格式),而POST请求的表单数据存储在请求体中,需通过req.body获取。 - Express未配置请求体解析中间件:默认情况下Express不会自动解析POST请求的请求体,导致
req.body为空。 - 字段名不匹配:前端传递的字段是
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"); } } ); });
验证修改
- 重启Express服务。
- 前端重新发送请求,此时后端可以正确获取到所有参数,数据库插入操作不会再触发
ER_BAD_NULL_ERROR错误。
内容的提问来源于stack exchange,提问作者Shahzaib
相关产品推荐
相关产品推荐

