Node.js+MongoDB电商API创建库存失败:无法找到指定卖家
Node.js+MongoDB电商API创建库存报错问题
问题描述
开发小型电商API时,已成功创建卖家集合,尝试创建嵌入卖家信息的库存集合,调用创建接口时提示“卖家未找到”,但数据库中确实存在对应卖家ID。
相关代码
models/inventory.js
const { sellerSchema } = require("./seller"); ... const inventorySchema = new mongoose.Schema({ itemName: { type: String, required: true, minlength: 3, maxlength: 30 }, itemDescription: { type: String, required: true, minlength: 10 }, quantity: { type: Number, required: true, min: 0, max: 999 }, category: { type: String, required: true, minlength: 20 }, price: { type: Number, required: true, min: 0 }, seller: { type: sellerSchema, required: true }, }); const Inventory = mongoose.model("Inventory", inventorySchema); exports.Inventory = Inventory;
routes/inventories.js
const { Seller } = require("../models/seller"); const { Inventory } = require("../models/inventory"); ... router.post("/", async (req, res) => { const seller = await Seller.findById(req.body.sellerId); if (!seller) return res.status(400).send("Seller not found"); let inventory = new Inventory({ itemName: req.body.itemName, itemDescription: req.body.itemDescription, quantity: req.body.quantity, category: req.body.category, price: req.body.price, seller: { _id: seller._id, name: seller.name }, }); inventory = await inventory.save(); res.send(inventory); });
Postman请求参数
{"itemName": "itemName1", "itemDescription": "itemDescription1", "quantity": 1, "category": "category1", "price": 1, "seller":"6531ea0358367cd5d863600d" }
问题分析与解决
1. 字段不匹配导致卖家未找到
路由代码中通过req.body.sellerId获取卖家ID,但Postman请求里传递的是seller字段,两者不匹配,导致Seller.findById拿到的是undefined,因此返回“卖家未找到”。
修复方案二选一:
- 修改Postman请求参数,将
seller字段名改为sellerId:
{"itemName": "itemName1", "itemDescription": "itemDescription1", "quantity": 1, "category": "category1", "price": 1, "sellerId":"6531ea0358367cd5d863600d" }
- 修改路由代码,将
req.body.sellerId改为req.body.seller:
const seller = await Seller.findById(req.body.seller);
2. 额外潜在问题:category字段长度不符合校验
inventorySchema中category字段设置了minlength: 20,但Postman传递的category1仅9个字符,即使卖家问题解决,保存库存时也会触发校验错误。需调整:
- 要么修改schema中的
minlength为合理值(比如2):
category: { type: String, required: true, minlength: 2 },
- 要么在请求中传入长度≥20的category值。
内容的提问来源于stack exchange,提问作者Walter
相关产品推荐
相关产品推荐

