Express JS не выполняет удаление - PullRequest
0 голосов
/ 25 августа 2018

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.log("i am 0")
    MongoClient.connect(url, function(err, db) {
        console.log("i am 1")
        db.collection('books', function(err, book) {
            db.collection.deleteOne( {_id: new mongodb.ObjectID(id)} );
            console.log("i am 2")
            if (err) {
                throw err;
            } else {
                db.close();
                res.redirect('/');
            }
        });
    });
});

Попытка выполнить запрос на удаление, но он даже не печатает («я 0»), не может определить, что сломанос кодом

ответ NPM POST / delete 404 7,247 мс - 1202

1 Ответ

0 голосов
/ 26 сентября 2018

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

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

...