首页 > 解决方案 > findOneAndDelete Mongoose 不工作 MER​​N 堆栈

问题描述

好日子专家,

我试过以下代码,但它没有用,它给了我空值..也许我的路线是错误的,但基本上它在其他路线上的工作方式......这是我删除案例的后端: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);
  }}>

谢谢 祝你有美好的一天

标签: node.jsreactjsmongodbexpressreact-redux

解决方案


您的代码中有两个问题:

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

  2. 的默认类型_idObjectId,假设您没有更改它,您需要将您的req.query.idwhich 类型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)

推荐阅读