首页 > 解决方案 > Mongoose.create 正在添加到数据库中,但仍然出现错误

问题描述

我正在尝试为产品创建一个 RESTful API 以执行 CRUD 操作。我使用的数据库是 MongoDB,我使用 mongoose 和 express 来访问数据。当我尝试创建产品时,它会将产品添加到数据库中,并且我想将创建数据的信息发送给用户,但它从 catch 块发送数据并且显示的错误为空。

我的架构

const userSchema = new mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: {type:String, required:true},
    price: {type:Number, required:true}
})

let product = mongoose.model("User",userSchema);

用于创建产品的端点

app.post("/addprod" ,(req,res) => {
    let prodname = req.body.name
    let price = req.body.price
    product.create({
        "_id" : mongoose.Types.ObjectId(),
        "name" : prodname,
        "price":price
    })
    .then(res => {
        console.log(res)
        res.json({
            _id:res._id,
            name:res.name,
            price:res.price,
            request:{
                method:"GET",
                url: "localhost:3000/prod?name=" + res.name 
            }
        })
    }
    )
    .catch(err => res.json({
        message1:err
    }))
})

控制台输出

{ _id: 5d188eb5ea237a204caba7c7,
  name: 'shaurya10',
  price: 3000,
  __v: 0 }

我希望输出是

{
    "_id":"5d188eb5ea237a204caba7c7",
    "name":"shaurya10",
    "price":"3000",
    "request":{
        "method":"GET",
        "url": "localhost:3000/prod?name=shaurya10" 
}

我得到的输出是

{
    "message1": {}
}

我做错了什么?

标签: node.jsmongodbexpressmongoose

解决方案


问题是您res在外部函数和内部函数中都用作响应变量

你可以简单地做到这一点。

app.post("/addprod" ,(req,res) => { 
   let prodname = req.body.name 
   let price = req.body.price
   product.create({ 
      "_id" : mongoose.Types.ObjectId(), 
      "name" : prodname, 
      "price":price 
   }).then(item => {
         res.send(item);
   }).catch(err => {
         res.send(err);
   });
});

推荐阅读