GoodDay专家
我尝试了下面的代码,但是没有用,它给了我null值。也许我的路线是错误的,但是基本上它可以在其他路线上工作……这是我删除情况的后端: .js / actions
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);
}}>
感谢您度过美好的一天
答案 0 :(得分:0)
我没有看到您将ID发送到后端,但是您正尝试从req.params.id中检索它,请尝试在链接末尾传递ID,例如“ delete /:id”,并在路由中也指定该ID
如果仍不能解决,请尝试以下代码进行路由
如果没有任何效果,请检查此内容,在组件中,您需要发送id(对象id),但是我看到“ row”是row的值是什么?如果行值不是数据库中的ID,则不会删除。如果这是您的问题,请尝试通过保留断点来检查代码,或者编写console.log()来检查“ row”的值。
try {
const removedProject = await Customer.remove({
_id: req.params.id
})
res.json(removedProject)
} catch (err) {
res.json({
message: err
})
}
答案 1 :(得分:0)
您的代码中有2个问题:
req.params.id
用于/delete/:id
形式的url,这显然不是您的路由,您应将其更改为req.query.id
,以匹配url中的查询参数,例如/delete?id=123
。
_id
的默认类型为ObjectId
,假设您没有对此进行更改,则需要将req.query.id
类型的string
转换为{ {1}}。
您似乎在使用猫鼬,所以这里是猫鼬语法:
ObjectId
对于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);
}
});
});
本机Mongo软件包:
nodejs