I've been stuck on this problem a few days... Basically, I am trying to delete one document from collection in mongoDB. In index I have a map of items that are shown from database and a "DeleteTest" component that has certain object from map passed. In that component, I have a button which when clicked triggers a function(deleteTestFun) to call API. In API I try to delete it but it doesn't seem to work... Also here is git link in case something is not clear. https://github.com/RennSter20/ReactStuff
Thanks :)
index
import React, { useState } from 'react';
import AppBar from '@mui/material/AppBar';
import Button from '@mui/material/Button';
import Card from '@mui/material/Card';
import CardActions from '@mui/material/CardActions';
import CardContent from '@mui/material/CardContent';
import CardMedia from '@mui/material/CardMedia';
import CssBaseline from '@mui/material/CssBaseline';
import Grid from '@mui/material/Grid';
import Stack from '@mui/material/Stack';
import Box from '@mui/material/Box';
import Toolbar from '@mui/material/Toolbar';
import Typography from '@mui/material/Typography';
import Container from '@mui/material/Container';
import Link from '@mui/material/Link';
import { createTheme, ThemeProvider } from '@mui/material/styles';
import Form from '../components/form';
import DeleteIcon from '@mui/icons-material/Delete';
import connectMongo from '../utlis/connectMongo';
import Test from '../models/testModel';
import Checkbox from '@mui/material/Checkbox';
import DeleteTest from '../components/deleteTest';
const theme = createTheme();
export default function Album({ tests }) {
return (
<div>
<Form></Form>
<div>
{tests.map((test) => (
<a key={test._id}>
<p>
{test.name} {test.email}
</p>
<DeleteTest test={test}></DeleteTest>
</a>
))}
</div>
</div>
);
}
export const getServerSideProps = async () => {
try {
console.log('CONNECTING TO MONGO');
await connectMongo();
console.log('CONNECTED TO MONGO');
console.log('FETCHING DOCUMENTS');
const tests = await Test.find();
console.log('FETCHED DOCUMENTS');
return {
props: {
tests: JSON.parse(JSON.stringify(tests)),
},
};
} catch (error) {
console.log(error);
return {
notFound: true,
};
}
};
deleteComponent
import React, { useState } from 'react';
import Button from '@mui/material/Button';
import CardActions from '@mui/material/CardActions';
import CardContent from '@mui/material/CardContent';
import CardMedia from '@mui/material/CardMedia';
import CssBaseline from '@mui/material/CssBaseline';
import Stack from '@mui/material/Stack';
import Box from '@mui/material/Box';
import Typography from '@mui/material/Typography';
import { createTheme, ThemeProvider } from '@mui/material/styles';
import DeleteIcon from '@mui/icons-material/Delete';
export default function DeleteTest(props) {
const postID = props.test._id;
const name = props.test.name;
const deleteTestFun = async (postID) => {
const response = await fetch('/api/delete/' + postID, {
method: 'DELETE',
});
const data = await response.json();
console.log(data);
};
//{props.test._id}
return (
<div>
<Button onClick={deleteTestFun}>Delete</Button>
</div>
);
}
postID (API)
import connectMongo from '../../../utlis/connectMongo';
import Test from '../../../models/testModel';
import { MongoClient } from 'mongodb';
import mongoose from 'mongoose';
/**
*
* @param {import("next").NextApiRequest} req
* @param {import("next").NextApiResponse} res
*/
export default async function deleteTest(req, res) {
try {
const object = Test.find({ _id: req.query.postID });
console.log(object.name);
await Test.findOneAndDelete({ name: req.query.name });
res.send('Item deleted');
} catch (error) {
console.log(error);
}
}
updated
export default async function deleteTest(req, res) {
try{
console.log(req.body.name);
const test = await Test.remove(req.body)
res.send('Item deleted');
}catch(error)
{
console.log(error)
}
}