【发布时间】:2020-05-30 20:15:54
【问题描述】:
我有一个删除产品的方法,在它执行之前检查尝试删除产品的用户是否是创建它的用户。当我使用 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 参数为空。:
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.findOne()。你应该看到它的null。 -
@thammada 实际上并没有删除产品,因为 userId 不一样。我只需要帮助修复,所以它会抛出正确的消息而不是 200。
-
回调接受
error和result,所以你应该可以通过(err, result) => ...并检查result的值
标签: javascript node.js mongodb mongoose