为什么它没有从 mongoDB 中删除数据但仍然显示成功消息
2021-01-24
1096
点击事件
这是下面 HTML 按钮的点击事件处理程序
const deleteProduct = (productsId) =>{
axios.delete(`/api/product/`,{
params: {productsId}
})
.then(response =>{
setSuccessMessage("Item Deleted Successfully", response, products)
})
.catch(error =>{
setErrorMessage("Item Deleting Failed")
})
}
HTML
上面的点击事件是针对删除按钮的
<div className="row justify-content-center">
{products && products.map(p => (
<Card style={{ width: '18rem', margin: '50px 50px'}} key={p._id} value={p._id}>
<Card.Img variant="top" src={p.imageLink} style={{width:'auto', height:'180px', objectFit:'cover'}}/>
<Card.Body >
<Card.Title>Name : {p.productName}</Card.Title>
<Card.Text>Description : {p.productDesc}</Card.Text>
<Card.Text>Price : ${p.productPrice}</Card.Text>
<div className="d-flex justify-content-center">
<Button className="mr-2" target="_blank"><FaPen /> Edit </Button>
<Button target="_blank" onClick={() => deleteProduct(p._id)}><FaTrash /> Delete </Button>
</div>
</Card.Body>
</Card>
))}
</div>
控制器
这是服务器端的删除控制器
exports.deleteAll = (req, res) => {
const { id } = req.query;
Product.findByIdAndDelete(id , (error, data)=>{
if(error) {
console.log('error in deleting')
throw error;
}
else{
console.log('user has been deleted', data);
res.status(204).json(data)
}
})
>
路由
删除路由器
router.delete('/',authenticateJWT, productController.deleteAll)
显示 DELETE /api/product/?productsId=600c1e6a48d6c4422c095f03 204 4.412 ms - -
但数据未被删除
2个回答
有时,当 mongoose 找不到元素时,它仍会以 200 响应。尝试访问此网站: https://mongoplayground.net/ 来测试您的代码。
在为 mongoose 编写查询之前,请务必 console.log() 您的 req.body 以确保您的值已发送到服务器。
const deleteProduct = (productsId) =>{
axios.post(`/api/product/`,{
productsId
})
.then(response =>{
setSuccessMessage("Item Deleted Successfully")
})
.catch(error =>{
setErrorMessage(error.response.data.msg)
})
}
exports.deleteAll = (req, res) => {
const { productsId } = req.body;
console.log(productsId, req.body); //console log your value to make sure
Product.update({"id": productsId},{$pull: {"id": productsId}}).then(() => {
res.status(200).json({msg: "Deleted"})
}).catch((err) => {res.status(400).json({msg: "failed"})})
twominds
2021-01-24
正如@user67所提到的,mongoose的findByIdAndUpdate在告知它是否找到了任何文档并成功删除它,或者它是否没有找到任何文档,因此甚至没有尝试删除任何内容时,并不是很雄辩。 根据 mongoose的文档 ,findByIdAndDelete():
Finds a matching document, removes it, passing the found document (if any) to the callback.
这意味着首先检查文档是否已被找到是微不足道的。只需在返回成功响应之前添加额外的检查:
Product.findByIdAndDelete(id , (error, data)=>{
if(error) {
console.log('error in deleting')
throw error;
}
if (!data) {
return res.status(404).send({ error: 'Data not found' });
}
console.log('user has been deleted', data);
return res.status(204).json(data);})
这额外的三行代码看起来有点乏味,但在使用这种系统一段时间后,我已经习惯添加它们,因为它们为我节省了很多时间和麻烦。
amda
2021-01-24