我有一个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错误,并且不知道为什么。我试图找出我的代码是否有错误,但没有发现任何错误
答案 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');
}
}
});
}