我正在构建一个CRUD应用程序。我被更新和删除操作卡住了,其他一切似乎都在工作。所以我使用方法覆盖来发送PUT和GET请求。
这是相关代码:
app.js
const methodOverride = require('method-override');
app.use(methodOverride('_method'));
以下是我为更新和删除所写的内容。我正在使用mongodb的monk驱动程序。
index.js
var router = express.Router();
router.put('/videos/:id', function(req, res){
var collection = db.get('videos');
var item = {
title: req.body.title,
genre: req.body.genre,
image: req.body.image,
description: req.body.desc
};
var id = req.params.id;
collection.update(
{_id: id}, {
$set: item
});
res.redirect('/videos');
});
router.delete('/videos/:id', function(req, res){
var collection = db.get('videos');
collection.remove({"_id" : req.params.id});
res.redirect('/videos');
});
对于删除表单
<form action="/videos/<%= video._id %>?_method=DELETE" method="POST">
<button type="submit" class="btn btn-danger">Delete video</button>
</form>
对于更新表单
<form method="POST" action="/videos/<%= video._id %>?_method=PUT">
<input type="hidden" name="_method" value="PUT">
</form>
我搜索了很多地方,当我点击提交按钮时,仍然会收到一个网页未找到(404(错误。我错过了什么?提交按钮应该调用我在index.js
中显示的两个方法。
检查是否导出了index.js文件并将其导入到app.js中,我认为它应该可以正常工作,但试着重新启动服务器,看看它是否工作。:(
form方法和express路由不匹配。
两者的表单方法分别为POST。
但是,如果您查看express路由,方法是PUT和DELETE。
尝试更改路线,然后再次测试是否有效。
我将router.put
和router.delete
更改为router.post
。