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
相关产品推荐
相关产品推荐

