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

Node.js+MySQL插入数据时遭遇ER_BAD_NULL_ERROR问题求助

问题描述

我正在用Postman测试API插入数据,我的class表包含两个字段(classId为自增字段,classes为普通字段),但持续收到ER_BAD_NULL_ERROR错误,不知如何解决。

Postman测试结果

Postman测试结果

数据库表结构(class表)

MySQL 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值,结合你的场景,可按以下步骤排查解决:

  1. 检查Postman请求参数

    • 确保请求体格式正确:如果用raw格式,选择JSON类型,传入结构如下的参数:
      {
        "classes": "示例班级"
      }
      
    • 若用form-data或x-www-form-urlencoded,需保证classes字段有具体值,未留空。
  2. 配置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);
      
  3. 新增参数校验逻辑

    • 在路由层提前校验参数合法性,避免无效请求进入数据库操作:
      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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:25:35