Попытка сделать запрос на удаление - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь сделать запрос на удаление. маршрутизатор. 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}}

Что случилось с моим code.hfjsdkfhjskdfhjskdfhsjkdfhjsdkhfjksfhkjsdfhjksdfhjksdfhjksdfhjskdfhsjkdfhjksdhfjksd sfdjfjksdlfjkdlsfsd fdskljflkjsdfkljdslfjsdl fsdjdkshfjkdshfkjsf sfhsjfkhjksdfksd

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Нашел пару вещей. Первый: Model.findById является асинхронным, и вам не нужно ключевое слово new .

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

Второй: чтобы удалить нужный элемент, вы на самом деле нужно передать идентификатор, а не весь объект. И я бы использовал Model.findOneAndDelete вместо Model.remove .

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

Но вы можете сделать все это за один шаг:

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

Редактировать: Вы также не можете использовать УДАЛИТЬ в HTML формах представления. Используйте POST и измените свой маршрут на POST тоже.

0 голосов
/ 26 апреля 2020

Причина в том, что атрибут method тега form не допускает никакого другого метода, кроме POST & GET.

Попробуйте использовать API-интерфейсы запроса, например fetch, или измените метод на POST с DELETE на передней и задней стороне.

Ссылка: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#attr -метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...