Приложение CRUD Express.js не может удалить - PullRequest
0 голосов
/ 04 июля 2018

У меня есть веб-приложение CRUD Express.js. Когда я применяю метод удаления, у меня появляется ошибка 404. Не найдено.

В файле app.js

var campagnes = require('./routes/campagnes');
app.use('/campagnes', campagnes);

В файле маршрутов / campagnes.js

var express = require('express');
var router = express.Router();
var campagne_controller = require('../controllers/campagneController');

router.delete('/delete/:id', campagne_controller.campagne_delete);

//In Controllers/campagneController.js file 

var Campagne = require('../models/campagne');

exports.campagne_delete = function(req,res){


    Campagne.findById(req.params.id)
        .exec(function(err, row){
            if (err) {
                var errornya  = ("Error Selecting : %s ",err );
                req.flash('msg_error', errornya);
                res.redirect('/campagnes');
            }
            else
            {
                if(row == [])
                {
                    req.flash('msg_error', "Campagne can't be find!");
                    res.redirect('/campagnes');
                }
                else
                {
              // I don't delet but just change campagne status to annulee
                     row.status = 'annulee';
                    // Success - go to campagne list
                    req.flash('msg_info', 'La campagne a été marquée comme annulée');
                    res.redirect('/campagnes');
                }
            }
        });
}

В файлах view / campagne / list.jade

p.text-right
    a.text-right(href='/campagnes/delete/#{campagne._id}')
         | Annuler la campagne
hr

Когда я нажимаю на мою ссылку в списке list.jade, у меня появляется ошибка 404 Not Found, и я не знаю почему. Я пытался найти, есть ли в моем коде ошибка, но я не вижу ничего плохого

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Я заменил свою ссылку кнопкой ниже:

form(method='post', action='/campagnes/delete/#{campagne._id}')
   input(type="hidden",name="_method", value="DELETE")
   button.btn.btn-sm.btn-danger(type='submit', style='float: right') Annuler la campagne
br

И в свой контроллер я положил этот код:

exports.campagne_delete = function(req,res){

    Campagne.findById(req.params.id)
        .exec(function(err, row){
            if (err) {
                var errornya  = ("Error Selecting : %s ",err );
                req.flash('msg_error', errornya);
                res.redirect('/campagnes');
            }
            else
            {

                if(row == [])
                {
                    req.flash('msg_error', "Campagne can't be find!");
                    res.redirect('/campagnes');
                }
                else
                {
                    doc = new Campagne({

                        status:'annulee',
                        _id:req.params.id

                    });

                    // Data from form is valid. Update the record.
                    Campagne.findByIdAndUpdate(req.params.id, doc, {}, function (err, thecampagne) {
                        if (err) {
                            var errors_detail  = ("Error Update : %s ", err );
                            req.flash('msg_error', errors_detail);
                            res.redirect('/campagnes');
                        }
                    });
                    // Success - go to customer list
                    req.flash('msg_info', 'La campagne a été marquée comme annulée');
                    res.redirect('/campagnes');
                }
            }
        });
}
0 голосов
/ 04 июля 2018

Вы не отправляете запрос как метод DELETE. Вы используете тег a, так как тег использует метод GET. Вы должны использовать ajax call, если хотите DELETE.

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