Node.js FindDoneAndDelete猫鼬不工作MERN堆栈
晚安专家们 我尝试了以下代码,但它不起作用,它给了我空值。。也许我的路线是错误的,但基本上它在其他路线上是有效的。。。下面是我的delete case后端:manage.js/actionsNode.js FindDoneAndDelete猫鼬不工作MERN堆栈,node.js,reactjs,mongodb,express,react-redux,Node.js,Reactjs,Mongodb,Express,React Redux,晚安专家们 我尝试了以下代码,但它不起作用,它给了我空值。。也许我的路线是错误的,但基本上它在其他路线上是有效的。。。下面是我的delete case后端:manage.js/actions export const removeRecipient = (payload) => async (dispatch) => { try { const res = await axios.delete( `${_config.MAT_URL}/api/1/custom
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 },
});
}
};
对于我的路线,即findOneAndDelete的mongoose查询,在customer.js下:
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);
}
});
});
对于前端im,使用“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);
}}>
consthandledelete=(id)=>{
console.log('delete')
去除剂(id)
}
{
e、 预防默认值();
Handledelet(世界其他地区);
}}>
谢谢祝您愉快我没有看到您将id发送到后端,但您正在尝试从req.params.id检索id尝试在链接末尾传递id,如“delete/:id”,并在路由中指定此id 如果这不能解决问题,请尝试下面的代码 如果什么都不起作用,请检查此项,在组件中您需要发送id(对象id),但我看到“row”row的值是多少?如果行值不是数据库中的id,则不会删除。如果这是您的问题,请尝试通过保留断点来检查代码,或者编写一个console.log()来检查“row”的值
试试看{
const removedProject=wait Customer.remove({
_id:req.params.id
})
res.json(removedProject)
}捕捉(错误){
res.json({
信息:呃
})
}
您的代码中有两个问题:
req.params.id
用于/delete/:id
格式的url,显然这不是您的路由,您应该将其更改为req.query.id
,它与url中的查询参数相匹配,例如/delete?id=123
\u id
的默认类型是ObjectId
,假设您没有更改它,您需要将req.query.id
类型string
转换为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);
}
});
});
对于nodejs
native Mongo包:
import {ObjectId} from "mongodb";
...
new ObjectId(req.query.id)
谢谢你的推荐。。。我在PostMan和redux开发工具上尝试了它。。DELETE_CUSTOMER reducer:msg(pin):“CUSTOMER deleted”deleted(pin):null下的输出您如何发送id?使用查询参数?如果是这样,则在im发送查询时使用
req.query.id
。例如,像update router.post('/updatebyd')。。。findOneAndUpdate{{u id}{$set:{name,email,organization}}类似的东西您是否将代码更改为req.query.id
而不是req.params.id
?,我在答案中添加了一个简短的解释。同样的输出。。。日志上显示该值未获取“_id(ObjectID)”。。仍为空..将出现警告。。。不推荐使用Collection.remove。而是使用deleteOne、deletemanny、ir bulkwrite我已经尝试过deleteOne和控制台的输出:{n:0,ok:1,deletedCount:0}deletedCount:0 n:0 ok:1ruer.delete(“/delete”),async(req,res)=>{try{const removecuster=wait Customer.deleteOne({id:req.params.id})res json(removecuster)}catch(err){res.json({message:err}}});很好的迹象表明您看到了一些响应{n:0,ok:1..}现在让我们检查idonce的值,通过在wait语句之后编写控制台日志来检查req.params.id值,比如const removedProject=wait Customer.deleteOne({u id:req.params.id})console.log(“id”,req.params.id);