javascript - 部分 API 在 NodeJS 中不起作用。我如何解决它?

标签 javascript node.js express mongoose

我正在尝试在 NodeJS 中为在线商店构建 REST API。我的 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
        });
    });
});

我遇到的问题是,当我尝试发送此 POST 请求时,.then block 中的代码不起作用,即使我尝试 console.log 某些内容,它不执行任何操作,除了 .then block 中的代码之外,一切正常:

.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 
      })
    })

我错过了什么吗?

最佳答案

您可以使用 async wait,而不是使用 then block 处理下一步。

 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
  });
 }
})

关于javascript - 部分 API 在 NodeJS 中不起作用。我如何解决它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60208944/

相关文章:

javascript - React.js 函数未触发

Javascript 动态表单字段

node.js - 当我在 adonis.js/node 中收到查询参数时,如何有条件地添加 where's?

javascript - 如何避免用作快速路由回调的函数中的 'this' 问题

express - CORS 不适用于 apollo-server-express

javascript - 我可以在 JavaScript 中创建自己的数组对象吗?

javascript - 在 yii 中为 GridView 的点击事件创建警报按钮

javascript - req.body 在 20 个条目后自动将数组转换为对象

node.js - createdAt 不能是数组或对象

javascript - React Router - 添加变量路由时样式表被标记为 "text/html"(/:userId)