Как удалить данные из коллекции mongodb, используя nodejs и mongoose - PullRequest
0 голосов
/ 01 июня 2018

У меня проблема с удалением данных в моем приложении Nodejs.У меня есть 2 кнопки в моем шаблоне ejs, которые отправляют один и тот же URL-адрес на сервер для удаления 2 моделей: первая кнопка:

<td class="td6"><a href="/myprojects/<%= project._id %>/cost/<%= labour._id %>/remove"><button type="button" class="btn btn-danger">Remove</button></a></td>

Вторая кнопка:

<td class="td21"><a href="/myprojects/<%= project._id %>/cost/<%= tool._id %>/remove"><button type="button" class="btn btn-danger">Remove</button></a></td>

У меня также естьодин и тот же маршрут для удаления данных.Первый работает отлично, а второй вообще не работает:

первый маршрут:

app.get("/myprojects/:id/cost/:labour_id/remove", function(req, res){
Labour.findByIdAndRemove(req.params.labour_id, function(err){
    if(err){
        console.log(err);
        }else{
            Project.findById(req.params.id, function(err, foundProject){
                if(err){
                        console.log(err);
                        }else{
                        res.redirect("/myprojects/" +req.params.id+ "/cost");
                        }
            });
    }
});

});

, а второй маршрут:

app.get("/myprojects/:id/cost/:tool_id/remove", function(req, res){
Tool.findByIdAndRemove(req.params.tool_id, function(err){
    if(err){
        console.log(err);
        }else{
            Project.findById(req.params.id, function(err, foundProject){
                if(err){
                        console.log(err);
                        }else{
                        res.redirect("/myprojects/" +req.params.id+ "/cost");
                        }
            });
    }
});

});

может каждыйвидите здесь какие-нибудь проблемы?

1 Ответ

0 голосов
/ 01 июня 2018

Кажется, что вы пытаетесь использовать один и тот же шаблон маршрута для выполнения двух разных задач (или, ну, точно, одной и той же вещи, но для разных типов объектов).Я имею в виду, что для Express /myprojects/:id/cost/:labour_id/remove и /myprojects/:id/cost/:tool_id/remove - это абсолютно одинаковые маршруты, поэтому второй просто никогда не совпадает.Решение состоит в том, чтобы сделать два разных маршрута, таких как /myprojects/:id/costs/labors/:labour_id/remove и /myprojects/:id/costs/tools/:tool_id/remove соответственно (примечание /labors/ и /tools/ разделы).

Другой способ (и это то, что вы, вероятно, пытались сделать) будетсоздать универсальный маршрут, например /myprojects/:id/costs/:entity(labours|tools)/:tool_id/remove, и использовать соответствующую модель Mongoose на основе значения параметра entity.Тем не менее, я бы не рекомендовал это, поскольку это сделало бы код менее читабельным.Иногда дублирование не так уж плохо.;)

Также, как правило, рекомендуется применять маршруты удаления как методы delete методы (app.delete).

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