Express.js CRUD应用程序无法删除

时间:2018-07-04 09:30:27

标签: node.js mongodb express mongoose

我有一个CRUD Express.js Web应用程序。当我应用Delete方法时,出现404 No Found错误。

在app.js文件中

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

在routes / 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');
                }
            }
        });
}

在views / 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 :(得分:0)

您没有以DELETE方法发送请求。您正在使用a标签,因为标签使用GET方法。如果需要ajax,则应使用DELETE呼叫。

答案 1 :(得分:0)

我用下面的按钮替换了链接:

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');
                }
            }
        });
}