我有一种删除产品的方法,在执行该操作之前,请先检查要删除该产品的用户是否是创建该产品的用户。当我使用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状态,与此同时产品并未删除。
知道如何处理吗?
您可以尝试这样的事情:
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
?