【发布时间】:2021-09-10 05:43:43
【问题描述】:
我无法删除 MongoDB 列表中的项目。
很遗憾,当在ExpensesListItem.tsx 中调用axios.delete 方法时,MongoDB 列表中的项目并没有被删除(没有错误信息打印到控制台)。
代码有什么问题(可能是猫鼬模式)?
ExpensesListItem.tsx
import React from "react";
import { IconButton, ListItem, ListItemSecondaryAction, ListItemText } from "@material-ui/core";
import DeleteIcon from '@material-ui/icons/Delete';
import { ExpenseAndAmountObject } from '../ExpenseAndAmountObject';
import axios from 'axios';
interface Props {
expenseTitle: string;
expenseAmount: string;
currencySymbol: string;
item: ExpenseAndAmountObject;
expenseAndAmountList: Array<ExpenseAndAmountObject>;
setExpenseAndAmountList: (value: Array<ExpenseAndAmountObject>) => void;
}
const ExpensesListItem: React.FC<Props> = (
{
expenseTitle,
expenseAmount,
currencySymbol,
item,
expenseAndAmountList,
setExpenseAndAmountList
}: Props) => {
const DeleteListItem = (toBeDeletedItemId: any) => {
setExpenseAndAmountList(expenseAndAmountList.filter(el => el._id !== toBeDeletedItemId));
axios.delete('http://localhost:4000/app/expenseslist', { data: { itemId: toBeDeletedItemId } )
.catch(function (error) {
console.log(error);
});
}
return (
<>
<ListItem className="list-item">
<ListItemText primary={expenseTitle} secondary={expenseAmount + currencySymbol} />
<ListItemSecondaryAction>
<IconButton onClick={()=>DeleteListItem(item._id)} edge="end">
<DeleteIcon className="delete-btn" />
</IconButton>
</ListItemSecondaryAction>
</ListItem>
</>
);
}
export default ExpensesListItem;
routes.js
router.delete('/expenseslist', (request, response) => {
let itemId = request.body._id;
ExpenseAndAmountTemplate.findByIdAndRemove(itemId, function(err){
if(err){
response.send("/Could not delete the item...");
} else {
response.send("/Expenses and amount item was deleted succesfully...");
}
});
});
ExpenseAndAmountModel.js
const mongoose = require('mongoose');
const ExpenseAndAmountTemplate = new mongoose.Schema({
_id: {
type:String,
required:false
},
expenseTitle: {
type:String,
required:true
},
expenseAmount: {
type:String,
required:true
}
});
module.exports = mongoose.model('ExpenseAndAmountData', ExpenseAndAmountTemplate);
【问题讨论】:
-
因为您将
itemId参数传递给axios.delete,例如{ data: { itemId: toBeDeletedItemId },所以request.body应该是request.body.itemId而不是request.body._id在routes.js内。 -
我已将其替换为
{ data: { _id: toBeDeletedItemId } }ExpensesListItem.tsx。但是结果是一样的——ExpensesListItem.tsx中调用axios.delete方法时,MongoDB列表的item并没有被删除 -
另外我已经从猫鼬模式中删除了
_id,现在它可以正常工作了,谢谢!
标签: javascript reactjs mongodb mongoose axios