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

Node.js+Mongoose电商API创建商品时验证错误求助

解决Mongoose验证错误:name和quantity字段必填问题

问题描述

开发基于Node.js+MongoDB的电商库存管理API时,使用Postman调用创建商品接口触发Mongoose验证错误,提示name和quantity为必填字段,且报错显示这两个字段的值为undefined。

检查点及解决方案

1. 修正Postman请求配置

报错核心原因是请求体未被正确接收,需确保Postman请求格式符合后端解析要求:

  • 请求方法选择POST
  • 请求头添加Content-Type: application/json
  • 在Body标签下选择raw,格式切换为JSON,输入合法的JSON数据:
    {
      "name": "测试商品",
      "quantity": 15
    }
    
  • 避免使用form-data或x-www-form-urlencoded格式(除非后端额外配置了对应解析逻辑)

2. 修复Express中间件的弃用警告

当前代码中express.urlencoded()未传入参数导致弃用警告,建议明确配置以支持多种请求体解析:

// 替换原有的urlencoded配置
app.use(express.urlencoded({ extended: true })); // 处理表单格式请求
app.use(express.json()); // 处理JSON格式请求

3. 添加调试日志验证请求体

在创建商品的控制器中添加日志,确认是否正确接收到请求数据:

module.exports.create = async function(req, res){
    try{
        console.log("接收的请求体:", req.body); // 新增调试日志
        let product = new Product({
            name: req.body.name,
            quantity: req.body.quantity,
        });
        await product.save() 
        return res.status(200).json({
            data:{
                message: "商品创建成功",
                products: product
            }
        })
    }catch(err){
        console.log('创建商品出错',err);
        // 改为返回JSON格式错误信息,更符合API规范
        return res.status(400).json({
            error: "创建商品失败",
            details: err.message
        })
    } 
}

如果日志显示req.body为空对象,需回到Postman重新检查请求配置。

报错信息(中文翻译)

Aditya Kumar@DESKTOP-980JOV2 MINGW64 ~/nodews/ecommerce-Api
$ node index.js
body-parser deprecated undefined extended: provide extended option index.js:7:17
已连接到端口 : 8800
成功连接到数据库
创建商品出错 Error: Product验证失败: name: 路径`name`是必填项., quantity: 路径`quantity`是必填项.
    at ValidationError.inspect (C:\Users\Aditya Kumar\nodews\ecommerce-Api\node_modules\mongoose\lib\error\validation.js:49:26)
    at formatValue (node:internal/util/inspect:782:19)
    at inspect (node:internal/util/inspect:347:10)
    at formatWithOptionsInternal (node:internal/util/inspect:2167:40)
    at formatWithOptions (node:internal/util/inspect:2029:10)
    at console.value (node:internal/console/constructor:324:14)
    at console.log (node:internal/console/constructor:360:61)
    at module.exports.create (C:\Users\Aditya Kumar\nodews\ecommerce-Api\controllers\product_controller.js:34:17)
    at processTicksAndRejections (node:internal/process/task_queues:96:5) {
  errors: {
    name: ValidatorError: 路径`name`是必填项.
        at validate (C:\Users\Aditya Kumar\nodews\ecommerce-Api\node_modules\mongoose\lib\schematype.js:1346:13)
        at SchemaString.SchemaType.doValidate (C:\Users\Aditya Kumar\nodews\ecommerce-Api\node_modules\mongoose\lib\schematype.js:1330:7)
        at C:\Users\Aditya Kumar\nodews\ecommerce-Api\node_modules\mongoose\lib\document.js:2835:18
        at processTicksAndRejections (node:internal/process/task_queues:78:11) {
      properties: [Object],
      kind: 'required',
      path: 'name',
      value: undefined,
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    },
    quantity: ValidatorError: 路径`quantity`是必填项.
        at validate (C:\Users\Aditya Kumar\nodews\ecommerce-Api\node_modules\mongoose\lib\schematype.js:1346:13)
        at SchemaNumber.SchemaType.doValidate (C:\Users\Aditya Kumar\nodews\ecommerce-Api\node_modules\mongoose\lib\schematype.js:1330:7)
        at C:\Users\Aditya Kumar\nodews\ecommerce-Api\node_modules\mongoose\lib\document.js:2835:18
        at processTicksAndRejections (node:internal/process/task_queues:78:11) {
      properties: [Object],
      kind: 'required',
      path: 'quantity',
      value: undefined,
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    }
  },
  _message: 'Product验证失败'
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:01:18