node.js - findOneAndDelete Mongoose 不工作 MERN 堆栈
问题描述
好日子专家,
我试过以下代码,但它没有用,它给了我空值..也许我的路线是错误的,但基本上它在其他路线上的工作方式......这是我删除案例的后端:manage.js/行动
export const removeRecipient = (payload) => async (dispatch) => {
try {
const res = await axios.delete(
`${_config.MAT_URL}/api/1/customer/delete`,
payload
);
dispatch({
type: DELETE_CUSTOMER,
payload: res.data,
});
} catch (err) {
dispatch({
type: POST_ERROR,
payload: { err },
});
}
};
对于我的路线,在 customer.js 下是 findOneAndDelete 的猫鼬查询:
router.delete("/delete", (req, res) => {
Customer.findOneAndDelete({ _id: req.params.id }, (err, Customer) => {
if (!err) {
res.json({ msg: "customer deleted", deleted: Customer });
} else {
console.log("Error removing :" + err);
}
});
});
对于前端我使用“AiOutlineDelete”,其编码为:
const handleDelete = (id) => {
console.log('delete')
removeRecipient(id)
}
<a
id={`delete-${rowIndex}`}
className="anchor-action-delete"
href="#foo"
onClick={(e) => {
e.preventDefault();
handleDelete(row);
}}>
谢谢 祝你有美好的一天
解决方案
您的代码中有两个问题:
req.params.id
/delete/:id
用于显然不是您的路由形式的 url ,您应该将其更改为req.query.id
匹配 url 中的查询参数,例如/delete?id=123
.的默认类型
_id
是ObjectId
,假设您没有更改它,您需要将您的req.query.id
which 类型string
转换为ObjectId
.
看起来您正在使用 mongoose,所以这里是 mongoose 语法:
const mongoose = require("mongoose");
router.delete("/delete", (req, res) => {
Customer.findOneAndDelete({ _id: new mongoose.Types.ObjectId(req.query.id) }, (err, Customer) => {
if (!err) {
res.json({ msg: "customer deleted", deleted: Customer });
} else {
console.log("Error removing :" + err);
}
});
});
对于nodejs
原生 Mongo 包:
import {ObjectId} from "mongodb";
...
new ObjectId(req.query.id)
推荐阅读
- docker - docker:来自守护程序的错误响应:无效的卷规范
- sql-server - T-SQL 有限交叉联接
- mysql - SQL查询用占位符替换字符串
- c# - 为什么 C# 有时会在没有任何迭代的情况下打印数组的内容?
- reactjs - 让我的 Gatsby 装备从 S3 中提取图像的最佳方法是什么?
- javascript - 尝试通过 npm 运行 node-sass 时出错
- html - 内容不在包装器 div 周围移动
- c - 如何在 C 语言中只等待一段时间的信号?
- c# - JSON 使用 Partial 对象序列化和反序列化 C#
- python - 在给定 n 和 e 且 (n/a) < e 的情况下,找到列表 L 中的最小值 a