使用express和mongoose / mongo创建一个待办事项应用程序。领域模型:作者有提醒。
在我的app.js
:
var bodyParser = require('body-parser')
var methodOverride = require('method-override')
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}))
app.use(methodOverride('_method'))
我的表单使用views/authors/edit.hbs
中的把手:
<h2>Edit {{name}}</h2>
<form action="/authors/{{_id}}" method="post">
<input type="hidden" name="_method" value="put">
<label>Name:</label>
<input type="text" name="name">
<input type="submit">
</form>
我的编辑视图路由和更新作者的请求:
app.get("/authors/:id/edit", function(req, res){
AuthorModel.findById(req.params.id, function(err, docs){
res.render("authors/edit", docs)
})
})
app.put("/authors/:id", function(req, res){
console.log("updating")
AuthorModel.findById(req.params.id, function(err, docs){
docs.name = req.body.name
docs.save(function(err){
if(!err){
res.redirect("authors/" + req.params.id)
}
})
})
})
当我检查开发工具中的元素时,我看到了我需要看到的所有内容,但是当我去提交时,给我错误无法发布。创建功能很好,所以我首先想到的是方法覆盖不起作用。如果我将put改为POST,一切都很好。
如果有帮助,请链接到包含此app
的仓库答案 0 :(得分:3)
根据文档判断,有两种常用方法可以覆盖该方法:
您正在使用&#34; old&#34;指定表单变量的方法,您仍然可以使用它,但这需要服务器端custom logic。
在我看来,解决此问题的最简单方法是使用查询字符串参数:
<form action="/authors/{{_id}}?_method=put" method="post">