findOneAndDelete猫鼬无法正常工作

时间:2020-09-23 13:32:29

标签: node.js reactjs mongodb express react-redux

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);
  }}>

感谢您度过美好的一天

2 个答案:

答案 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个问题:

  1. req.params.id用于/delete/:id形式的url,这显然不是您的路由,您应将其更改为req.query.id,以匹配url中的查询参数,例如/delete?id=123

  2. _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