我正在制作喜欢、不喜欢的功能。 一切正常,除了这个删除方法😐
在反应:
const goDownLike = async () => {
const variables = {
fromWhom: user.userData._id,
toWhat: toWhat
};
await axios.delete('/api/heart/downLike', variables);
}
在 Node.js :
router.delete('/downLike', (req, res) => {
Like.findOneAndDelete(req.body).exec((err, result) => {
if (err) return res.status(400).json({ success: false, err });
res.status(200).json({ success: true });
});
});
每次点击心形的时候,好像删除了别人的点赞,包括我的😐
所以我就这样改变了:
router.delete('/downLike', (req, res) => {
const { fromWhom, toWhat } = req.body;
Like.findOneAndDelete({ fromWhom: fromWhom, toWhat: toWhat }).exec(
(err, result) => {
if (err) return res.status(400).json({ success: false, err });
res.status(200).json({ success: true });
}
);
});
但这实际上是不要删除任何喜欢,即使是我的!
我从此改变了
Like.findOneAndDelete
到此
Like.deleteOne
这也不起作用。它什么也不删除。
所以我把
delete method
改为post method
终于成功了。 😐
我的点赞被删除了,而某人的心却没有被删除。
但我不想用
post method
代替 delete method
😐
我想遵守 RESTful 的规则。
我该怎么办? 我错过了什么?
感谢您的帮助。
它适用于 POST 而不是 DELETE 的原因是
axios.post()
的第二个参数是正文,而 axios.delete()
的第二个参数是 axios 配置对象。这大概是因为 对于 DELETE 请求是否可以或应该有主体,以及如果有主体会发生什么,存在一些分歧,并且随着时间的推移而发生变化。
您可以在配置对象中传递数据,如here所示。
就我而言,我遇到了一个奇怪的错误:Axios 无法解析从后端发送的 204 状态代码。只需在后端将
204
状态代码更改为 200
即可解决该问题。
我得到:
Proxy error: Could not proxy request /api/user/ide
这清楚地表明解析问题被污染到错误消息(完整路径为/api/user/idea,最后一个a在解析时被截断)。
这花了我一生的两个小时。作为互联网上最流行的 javascript 请求库,我希望 Axios 具有更强的鲁棒性。