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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:38:27