Node.js+MySQL插入数据时遭遇ER_BAD_NULL_ERROR问题求助
问题描述
我正在用Postman测试API插入数据,我的class表包含两个字段(classId为自增字段,classes为普通字段),但持续收到ER_BAD_NULL_ERROR错误,不知如何解决。
Postman测试结果

数据库表结构(class表)

相关代码
数据库操作层代码
const db = require('../config/databaseConfig'); const adminDB = {}; adminDB.createClass = (classes, callback) => { var dbConn = db.getConnection(); dbConn.connect(function (err) { if (err) { return callback(err, null); } const query = "INSERT INTO practiceme.class (classes) VALUES (?)"; dbConn.query(query, [classes], (err, results) => { dbConn.end(); if (err) { console.log(err); return callback(err, null); } else { return callback(null, results); } }); }); }; module.exports = adminDB;
路由层代码
const express = require("express"); const router = express.Router(); const adminDB = require("../model/admin"); router.post("/createClass", (req, res, next) => { var {classes} = req.body; adminDB.createClass(classes,(err, results) => { if (err) { return res.status(500).send({ err }); } return res.status(200).json(results); } ); } ); module.exports = router;
解决方案
ER_BAD_NULL_ERROR错误的核心是向不允许为NULL的classes字段插入了NULL值,结合你的场景,可按以下步骤排查解决:
检查Postman请求参数
- 确保请求体格式正确:如果用
raw格式,选择JSON类型,传入结构如下的参数:{ "classes": "示例班级" } - 若用
form-data或x-www-form-urlencoded,需保证classes字段有具体值,未留空。
- 确保请求体格式正确:如果用
配置Express请求体解析中间件
- 你的代码中缺少JSON请求体解析配置,导致
req.body无法正确读取参数,最终classes变量为undefined,被当作NULL插入。在Express主文件(如app.js)中添加:const express = require('express'); const app = express(); // 解析JSON格式请求体 app.use(express.json()); // 解析x-www-form-urlencoded格式请求体(可选) app.use(express.urlencoded({ extended: true })); // 挂载路由 const adminRouter = require('./routes/admin'); app.use('/admin', adminRouter);
- 你的代码中缺少JSON请求体解析配置,导致
新增参数校验逻辑
- 在路由层提前校验参数合法性,避免无效请求进入数据库操作:
router.post("/createClass", (req, res, next) => { var {classes} = req.body; // 校验classes字段非空 if (!classes || classes.trim() === '') { return res.status(400).send({ message: 'classes字段不能为空' }); } adminDB.createClass(classes,(err, results) => { if (err) { return res.status(500).send({ err }); } return res.status(200).json(results); } ); } );
- 在路由层提前校验参数合法性,避免无效请求进入数据库操作:
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

