Mongoose.create добавляет в базу данных, но все еще ловит ошибку - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь создать 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": {}
}

Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 01 июля 2019

Проблема в том, что вы используете 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);
   });
});
0 голосов
/ 01 июля 2019

Если вы хотите использовать json для отправки repsonse ... вы можете сделать это ( самое короткое и хорошо отформатированное )

app.post("/addprod", (req,res) => { 
   product.create({ 
      "_id" : mongoose.Types.ObjectId(), 
      "name": req.body.name, 
      "price": req.body.price
   }).then(product => {
         res.json(product);
   }).catch(err => {
         res.json(err);
   });
});
0 голосов
/ 30 июня 2019

Это, вероятно, название продукта и цена пуста. Вы определяете их как обязательные поля:

    name: {type:String, required:true},
    price: {type:Number, required:true}

Измените свой код:

    let prodname = req.body.name || 'sample product'
    let price = req.body.price || '20'

Затем проверьте результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...