Часть API не работает в NodeJS. Как мне это исправить? - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь создать REST API в NodeJS для интернет-магазина. Мой код для POST-запроса выглядит следующим образом:

router.post('/', (req, res, next) => {
    const order = new Order({
        _id: new mongoose.Types.ObjectId(),
        customer_name: req.body.order.customer_name,
        total_price: req.body.order.total_price,
        products: req.body.order.products,
    });
    order
    .save()
    .then(result => {
        req.body.order.products.forEach(value => {
            let availiableQuantity = value.available_quantity - value.ordered_quantity;
            Product.findOneAndUpdate({ id: value.id }, { available_quantity: availiableQuantity 
      })
     })
     res.status(201).json({
            message: "Successfully created product",
            createdProduct: {
                customer_name: result.customer_name,
                products: result.products,
        }
      });
    })
  .catch(err => {
        console.log(err);
        res.status(500).json({
            error: err
        });
    });
});

Проблема, с которой я сталкиваюсь, заключается в том, что код в блоке .then не работает, когда я пытаюсь отправить этот POST-запрос, даже если я пытаюсь что-то console.log, он ничего не делает, все работает, кроме кода в .then блоке:

.then(result => {
        console.log('test')
        req.body.order.products.forEach(value => {
            let availiableQuantity = value.available_quantity - value.ordered_quantity;
            Product.findOneAndUpdate({ id: value.id }, { available_quantity: availiableQuantity 
      })
    })

Я что-то упустил?

1 Ответ

1 голос
/ 13 февраля 2020

Вместо этого вы можете использовать asyn c await вместо обработки следующего шага блоком then.

 router.post('/',async (req, res) => {
  try{
   const order = new Order({
    _id: new mongoose.Types.ObjectId(),
    customer_name: req.body.order.customer_name,
    total_price: req.body.order.total_price,
    products: req.body.order.products,
  });
  var result = await order.save();
  req.body.order.products.forEach(value => {
        let availiableQuantity = value.available_quantity - 
 value.ordered_quantity;
        Product.findOneAndUpdate({ id: value.id }, { 
 available_quantity: availiableQuantity 
 })
 res.status(201).json({
        message: "Successfully created product",
        createdProduct: {
            customer_name: result.customer_name,
            products: result.products,
    }
  });
  } catch(e) {
   res.status(500).json({
        message: "Bad request",
        error: e
  });
 }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...