尽管发送正常,但无法删除数据库中的数据

Cannot delete data in database, despite sending just fine

从我的前端我可以 post 数据进入我的数据库,使用相同的方法我无法从我的数据库中删除数据但是,尽管使用 html 表单(而不是的反应)和相同的后端。

我的app.js:

import './App.css';
import axios from 'axios';
import React, { useState, useEffect } from 'react'

function App() {
  const [Item, setItem] = useState(
    {
      title: '',
      description: '',
      id: ''
    }
  )



  //get user input, and send to mongod db
  function addNew(event) {
    event.preventDefault();
    const newItem = {
      blogTitle: Item.title,
      blogBody: Item.description
    }

    axios.post('http://localhost:3001/api/addNew', newItem);
  }

  function handleChange(event) {
    let {name, value} = event.target;
    setItem(prevInput => {
      return(
        {
          ...prevInput,
          [name]: value,
        }
      );
    });
    // console.log(Item);
  }


  //delete
  function deleteOne(event) {
    event.preventDefault();
    const deleteItem = {
      id: Item.id
    }
    console.log(deleteItem)

    axios.post('http://localhost:3001/api/delete', deleteItem);
  }




  return (
    <div className="App">



      <input onChange={handleChange} name="title"  value={Item.title} placeholder="title"></input>
      <input onChange={handleChange} name="description"  value={Item.description} placeholder="description"></input>

      <button onClick={addNew}>Submit</button>
      <br />

      <input  onChange={handleChange} name='id' value={Item.id}  placeholder='delete id'></input>
      <button onClick={deleteOne} >delete</button>

    </div>
  )}


export default App;

在我的 server.js:

app.post('/api/addNew', (req, res) => {
  res.header('Access-Control-Allow-Origin', 'http://localhost:3000');
  res.header(
    'Access-Control-Allow-Headers',
    'Origin, X-Requested-With, Content-Type, Accept'
  );
  db.collection('miscData').insertOne(req.body, (err, result) => {
      if (err) console.log(err)
      res.redirect('/');
  })
})

app.delete('/api/delete', (req, res) => {
  res.header('Access-Control-Allow-Origin', 'http://localhost:3000');
  res.header(
    'Access-Control-Allow-Headers',
    'Origin, X-Requested-With, Content-Type, Accept'
  );
  const myquery = { _id: new mongodb.ObjectId(String(req.body.id)) }
  db.collection('miscData').deleteOne(myquery, (err, obj) => {
    if (err) throw err;
    console.log("1 document deleted");
    res.redirect('/');
  })
})

我的想法是,我想在输入栏中输入 id 并以这种方式将其删除。我可以用 addNew 发送数据,但 deleteItem 什么也没做。我还要补充说,对于这两个功能,我都在控制台 GET http://localhost:3001/ 404 (Not Found) 中获取,但是 addNew 仍然将项目添加到数据库中。

这就是我的数据,如果有帮助的话:data image

我认为您的问题是当您设置 deleteItem 时调用 Id“blogTitle”

const deleteItem = {
  blogTitle: Item.id
}

然后当您创建查询以删除您试图在服务器上获取“req.body.id”时。

const myquery = { _id: new mongodb.ObjectId(String(req.body.id)) }

我认为您需要更改一个以匹配另一个。这样你就不会试图删除未定义的。不确定是否仍需要转换为字符串。

将客户端代码更改为:

const deleteItem = {
  id: Item.id
}