正在尝试发出删除请求



我正在尝试发出删除请求。router.js

const { Router } = require("express");
const Todo = require("../models/todo");
const router = Router();
router.get("/", async (req, res) => {
const todos = await Todo.find({}).lean();
res.render("index", {
title: "Todo App",
todos
});
});
router.post("/create", async (req, res) => {
const todo = new Todo({
title: req.body.title
})
await todo.save();
res.redirect("/");
});
router.delete("/deltodo", async (req, res) => {
const todo = new Todo.findById(req.body.id);
const removetodo = await Todo.remove({_id: todo});
res.json(removetodo);
res.redirect("/");
})
module.exports = router;

html文件

<h2>Todo Page</h2>
<form action="/create" method="POST">
<div class="input-field">
<input type="text" name="title">
<label>Todo title</label>
</div>
<button type="submit" class="btn">Create</button>
</form>
{{#if todos.length}}
<ul>
{{#each todos}}
<li class="todo">
<form action="/deltodo" method="DELETE">
<label>
<span>{{title}}</span>
<input type="hidden" value="{{_id}}" name="id">
<button class="btn btn-small" type="submit">Delete</button>
</label>
</form>
</li>
{{/each}}
</ul>
{{else}}
<p>NO TODOS</p>
{{/if}}

我的代码怎么了sfdjfjksdlfjkdlsfsdfdskljflkjsdfkljdslfjsdlfsdjdkshfjkdshfkjsfsfhsjfkhjksdfksd

发现了一些东西
首先:Model.findById是异步的,您不需要new关键字。

const todo = await Todo.findById(req.body.id);

第二:为了删除正确的项,实际上需要传递id,而不是整个对象。我会使用Model.findOneAndDelete而不是Model.remove

const removetodo = await Todo.findOneAndDelete({_id: todo._id});

但你可以一步完成所有这些:

await Todo.findOneAndDelete({_id: req.body.id});

编辑:您也不能在HTML表单提交中使用DELETE。使用POST并将路由更改为POST。

原因是form标记的method属性不接受除POST&GET

尝试使用一些请求api,如fetch,或者在前端和后端将方法从DELETE更改为POST

参考:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr-形式法

最新更新