使用mongoose.removeOne后,Node JS抛出不能在将标头发送给客户端后设置标头

问题描述 投票:0回答:1

我有一种删除产品的方法,在执行该操作之前,请先检查要删除该产品的用户是否是创建该产品的用户。当我使用Insomnia执行它时,它成功删除了产品,但在控制台上收到一条错误消息,说在将头发送到客户端后无法设置头。

我的方法:

exports.deleteProduct = (req, res) => {
  const id = req.params.productId;
  Product.deleteOne({ _id: id, userId: req.user._id }, () => {
    return res.status(401).json("Not authorized");
  })
    .then(() => {
      return res.status(200).json("Product deleted");
    })
    .catch((err) => {
      return res.status(500).json({
        error: err,
      });
    });
};

我很确定这是会发生的,因为我在执行它之后将.then()和.catch()链接起来。

我尝试执行此操作,但由于我要发送给回调函数的err参数为null,因此无法正常工作。:

exports.deleteProduct = (req, res) => {
  const id = req.params.productId;
  Product.deleteOne({ _id: id, userId: req.user._id }, (err) => {
    if (err) {
      return res.status(401).json("Not authorized");
    }
    return res.status(200).json("Product deleted");
  });
};

[当我尝试第二种方法时,我始终获得200状态,与此同时产品并未删除。

知道如何处理吗?

javascript node.js mongodb mongoose
1个回答
0
投票

您可以尝试这样的事情:

Product.deleteOne({ _id: id, userId: req.user._id }, (err, result) => {
   if(err) {
      return "something"
   }
   return "something else"
});

或:以异步/等待方式

try {
  await Product.deleteOne({ _id: id, userId: req.user._id });
} catch (err) {
  // handle error here
}

顺便问一下,为什么要在userId方法中传递deleteOne

© www.soinside.com 2019 - 2024. All rights reserved.