Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js FindDoneAndDelete猫鼬不工作MERN堆栈_Node.js_Reactjs_Mongodb_Express_React Redux - Fatal编程技术网

Node.js FindDoneAndDelete猫鼬不工作MERN堆栈

Node.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

晚安专家们

我尝试了以下代码,但它不起作用,它给了我空值。。也许我的路线是错误的,但基本上它在其他路线上是有效的。。。下面是我的delete case后端:manage.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 },
    });
  }
};
对于我的路线,即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

  • 看起来您正在使用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
    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);