Когда вы видите 404, основная причина определенно заключается в том, как вы настроили маршрутизацию.Этот код будет успешно вызван, если он находится в app.js / server.js (или где-то в другом корневом экспресс-файле), но 404 означает, что вы поместили его во вторичный файл и где-то используете другой путь.
С учетом вышесказанного у вас также возникает проблема с определением вашего маршрута, если вы хотите прочитать параметр маршрута (именно это пытается сделать первая строка вашего обработчика маршрута).
router.post('/delete/:i', function...
Сама форма не передает никакого идентификатора через имя (или идентификатор).Вы можете либо передать идентификатор через URL-адрес:
action= "/delete?id=" + id
... и прочитать его в своем обработчике маршрута, используя req.query.id
, либо вы можете вставить скрытый ввод в форму и прочитать его, используя req.body.id
.
Кроме того, атрибут name
атрибут устарел и должен быть заменен на id
.
Затем важно отметить, что мопс оченьзависит от отступа.Ваш вставленный код сгенерирует пустую форму и отдельное поле ввода.
This:
form(id="form1" action="/delete" method="POST")
input(type="submit",name=+item['id'] value="delete")
Создает этот HTML-код:
<form id="form1" action="/delete" method="POST"></form>
<input type="submit" name="itemId" value="delete">
Если вы измените мопсшаблон для этого (обратите внимание на два дополнительных пробела в строке ввода):
form(id="form1" action="/delete" method="POST")
input(type="submit",name=+item['id'] value="delete")
Вы получите это, которое должно работать как положено:
<form id="form1" action="/delete" method="POST">
<input type="submit" name="itemId" value="delete">
</form>
Тогда есть проблема вваша функция удаления , где вы пропускаете обратный вызов.
db.collection.deleteOne( {_id: new mongodb.ObjectID(id)} );
Вам необходимо добавить обещание или обратный вызов здесь, иначе ваш код будет двигаться прямо, чтобы закрыть соединение.