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

Node.js中如何校验数据插入的非空字段并抛出错误?

解决创建汽车时空值插入的问题

要实现name、color、brand为空时拒绝插入并返回错误,推荐从控制器前置校验和模型层校验两个层面入手,双重保障数据有效性:

1. 控制器层面:前置参数校验

在创建Car实例前,先检查请求体中的必填字段是否存在且不为空,快速返回400错误给客户端:

export async function createCar (req, res) {
    // 解构并校验必填字段(过滤纯空格)
    const { name, color, brand } = req.body;
    if (!name?.trim() || !color?.trim() || !brand?.trim()) {
        return res.status(400).json({
            success: false,
            message: 'name、color、brand为必填字段,不能为空或仅含空格'
        });
    }

    const car = new Car({
        car_id: id, // 注意确保id已正确定义(如生成UUID或从请求中获取)
        name: name.trim(),
        color: color.trim(),
        brand: brand.trim(),
    });
    
    return car
        .save()
        .then((newCar) => {
            return res.status(201).json({
                success: true,
                message: 'New car created successfully',
                Car: newCar,
            });
        })
        .catch((error) => {
            console.log(error);
            // 区分模型校验错误和服务器错误
            const status = error.name === 'ValidationError' ? 400 : 500;
            res.status(status).json({
                success: false,
                message: status === 400 ? '字段校验失败' : 'Server error. Please try again.',
                error: error.message,
            });
        });
}

2. 模型层面:Schema校验(兜底保障)

即使控制器校验有遗漏,通过Mongoose Schema的required约束,确保数据库层面拒绝空值插入:

const mongoose = require('mongoose');

const carSchema = new mongoose.Schema({
    car_id: { 
        type: String, 
        required: [true, 'car_id不能为空'] 
    },
    name: { 
        type: String, 
        required: [true, 'name不能为空'],
        trim: true // 自动去除首尾空格
    },
    color: { 
        type: String, 
        required: [true, 'color不能为空'],
        trim: true
    },
    brand: { 
        type: String, 
        required: [true, 'brand不能为空'],
        trim: true
    }
});

const Car = mongoose.model('Car', carSchema);
module.exports = Car;

说明:

  • 控制器校验能快速响应客户端错误,避免无效请求进入数据库操作
  • 模型层校验是兜底方案,从底层确保数据完整性,防止绕过控制器的非法插入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:54:31