无法从 nextjs 应用中的 mongoDB 中通过 id 删除单个项目
Can't get single item to delete by id from mongoDB in nextjs app
我正在 nextjs 中制作一个待办事项应用程序进行练习,我很难使用 deleteOne 函数从数据库中删除单个待办事项。
这是前端的调用:
async function deleteTodo(id) {
await fetch(`/api/todos/${id}`, {
method: "DELETE",
});
setTodosList(todosList.filter((todo) => todo._id !== id));
}
下面是 DELETE 方法的处理:
async function handler(req, res) {
let client;
try {
client = await connectDatabase();
} catch (error) {
res
.status(500)
.json({ message: error.message || "Error connecting to MongoDB." });
return;
}
if (req.method === "DELETE") {
const { id } = req.query;
console.log(id);
if (!id || id.trim() === "") {
res
.status(500)
.json({ message: "A todo id was not sent with the request." });
client.close();
return;
}
try {
let result;
let allTodos;
result = await deleteTodo("todos", id);
allTodos = await getAllTodos("todos");
res.status(201).json({
message: `Todo ${id} successfully removed!`,
todos: allTodos,
});
} catch (error) {
res
.status(500)
.json({ message: error.message || "Unable to delete todo." });
}
}
client.close();
}
及其调用的 deleteTodo 辅助函数:
export async function deleteTodo(collection, id) {
const client = await connectDatabase();
const db = client.db();
const result = await db.collection(collection).deleteOne({ _id: id });
return result;
}
如果我向 deleteOne 传递一个空对象,我可以让它删除 todos 数组中的第一项,但是当我尝试使用 { _id: id } 指定 id 时,它不会删除。
谁能看出是什么原因造成的?谢谢
我认为从 front-end
传递的 id
具有 string
类型。由于 _id
具有 ObjectId 类型,因此需要将 id
字符串转换为 ObjectId。
安装:
npm i bson
在您的 deleteTodo
中导入:
import { ObjectId } from 'bson';
并尝试改变,在deleteTodo
const result = await db.collection(collection).deleteOne({ _id: ObjectId(id) });
我正在 nextjs 中制作一个待办事项应用程序进行练习,我很难使用 deleteOne 函数从数据库中删除单个待办事项。
这是前端的调用:
async function deleteTodo(id) {
await fetch(`/api/todos/${id}`, {
method: "DELETE",
});
setTodosList(todosList.filter((todo) => todo._id !== id));
}
下面是 DELETE 方法的处理:
async function handler(req, res) {
let client;
try {
client = await connectDatabase();
} catch (error) {
res
.status(500)
.json({ message: error.message || "Error connecting to MongoDB." });
return;
}
if (req.method === "DELETE") {
const { id } = req.query;
console.log(id);
if (!id || id.trim() === "") {
res
.status(500)
.json({ message: "A todo id was not sent with the request." });
client.close();
return;
}
try {
let result;
let allTodos;
result = await deleteTodo("todos", id);
allTodos = await getAllTodos("todos");
res.status(201).json({
message: `Todo ${id} successfully removed!`,
todos: allTodos,
});
} catch (error) {
res
.status(500)
.json({ message: error.message || "Unable to delete todo." });
}
}
client.close();
}
及其调用的 deleteTodo 辅助函数:
export async function deleteTodo(collection, id) {
const client = await connectDatabase();
const db = client.db();
const result = await db.collection(collection).deleteOne({ _id: id });
return result;
}
如果我向 deleteOne 传递一个空对象,我可以让它删除 todos 数组中的第一项,但是当我尝试使用 { _id: id } 指定 id 时,它不会删除。
谁能看出是什么原因造成的?谢谢
我认为从 front-end
传递的 id
具有 string
类型。由于 _id
具有 ObjectId 类型,因此需要将 id
字符串转换为 ObjectId。
安装:
npm i bson
在您的 deleteTodo
中导入:
import { ObjectId } from 'bson';
并尝试改变,在deleteTodo
const result = await db.collection(collection).deleteOne({ _id: ObjectId(id) });