Express JS не выполняет удаление

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

Метод deleteOne должен ожидать обратного вызова.

Yaman Jain 25.08.2018 08:25

Вы уверены, что исполнение вошло в код для router.post('/delete' . Используйте в коде инструкции try .. catch, чтобы узнать, где и в чем заключается ошибка. Предоставьте сведения, которые могут быть полезны при отладке.

Arihant 25.08.2018 18:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы видите ошибку 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)} );

Вам нужно либо добавить обещание, либо обратный вызов, иначе ваш код будет двигаться прямо, чтобы закрыть соединение.

Другие вопросы по теме