NodeJS {“索引”:0,“代码”:11000,“关键图案”:{“名称”:1},“密钥值”:{“Name”:null }}将第二个产品添加到数据库时出错

7fhtutme  于 2023-01-12  发布在  Node.js
关注(0)|答案(2)|浏览(76)

在尝试使用以下方法将产品添加到我的数据库时,

//ADD PRODUCT
router.post("/addproduct", verifyTokenAndAdmin, async (req, res) => {
  const newProduct = new Product(req.body);

  try {
    console.log("req for pdt add");
    const savedProduct = await newProduct.save();
    console.log("pdt added successfully");
    res.status(200).json(savedProduct);
  } catch (err) {
    res.status(500).json(err);
  }
});

Mongoose在添加第二个产品时抛出此错误。第一个产品总是成功的,但无法进行第二次发布请求,并且更新产品详细信息的请求也不起作用,但删除请求工作正常

{
    "index": 0,
    "code": 11000,
    "keyPattern": {
        "Name": 1
    },
    "keyValue": {
        "Name": null
    }
}

下面是我的产品架构
常量{默认值: Mongoose =要求(“ Mongoose ”);

const ProductSchema = new mongoose.Schema(
  {
    title: { type: String, required: true, unique: true },
    desc: { type: String, required: true },
    img: { type: String, required: true },
    category: { type: Array, required: true },
    size: { type: String },
    color: { type: String },
    price: { type: Number, required: true },
  },
  { timestamps: true }
);

module.exports = mongoose.model("Product", ProductSchema);
xzv2uavs

xzv2uavs1#

因为你的MongoDB字段“name”在字段“Indexes”中有唯一的属性,你必须删除这个属性,否则你永远不能创建相同的name值,即使它是一个空值。
我以前也犯过同样的错误,这是我对这个问题的解决方案:

ijxebb2r

ijxebb2r2#

出现此错误的原因是模型等待接收实际上应该来自请求主体的数据,但由于您没有添加中间件app.use(express.json())而无法读取该数据,因此它创建了索引,但没有创建所有数据。

相关问题