PUGJS скрипт
form(id = "form1" action = "/delete" method = "POST")
input(type = "submit",name=+item['id'] value = "delete")
Мой код ExpressJS
router.post('/delete', function(req, res, next) {
var id = req.params("i");
console.info("i am 0")
MongoClient.connect(url, function(err, db) {
console.info("i am 1")
db.collection('books', function(err, book) {
db.collection.deleteOne( {_id: new mongodb.ObjectID(id)} );
console.info("i am 2")
if (err) {
throw err;
} else {
db.close();
res.redirect('/');
}
});
});
});
Пытаюсь выполнить запрос на удаление, но он даже не печатает («я 0») не могу определить, что сломано в коде
Ответ NPM POST / удалить 404 7,247 мс - 1202
Вы уверены, что исполнение вошло в код для router.post('/delete' . Используйте в коде инструкции try .. catch, чтобы узнать, где и в чем заключается ошибка. Предоставьте сведения, которые могут быть полезны при отладке.





Когда вы видите ошибку 404, основная причина определенно заключается в том, как вы настроили маршрутизацию. Этот код будет успешно вызван, если он находится в app.js / server.js (или любом другом корневом экспресс-файле), но 404 означает, что вы поместили его во вторичный файл и где-то используете другой путь.
С учетом сказанного у вас также есть проблема с тем, как определяется ваш маршрут, если вы хотите прочитать параметр маршрута (что пытается сделать первая строка вашего обработчика маршрута).
router.post('/delete/:i', function...
Сама форма не передает никакого идентификатора через имя (или идентификатор). Вы можете передать идентификатор через URL-адрес:
action= "/delete?id = " + id
... и прочтите это в обработчике маршрута с помощью req.query.id, или вы можете вставить скрытый ввод в форму и прочитать его с помощью req.body.id.
Кроме того, форма name с атрибутом устарел должна быть заменена на id.
Затем важно отметить, что мопс сильно зависит от отступов. Ваш вставленный код сгенерирует пустую форму и отдельное поле ввода.
Этот:
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)} );
Вам нужно либо добавить обещание, либо обратный вызов, иначе ваш код будет двигаться прямо, чтобы закрыть соединение.
Метод
deleteOneдолжен ожидать обратного вызова.