expressJS 的方法覆盖不适用于 PUT 隐藏方法 HTML FORM
Method override for expressJS not working for PUT hidden method HTML FORM
使用 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)
}
})
})
})
当我检查开发工具中的元素时,我看到了我需要看到的所有内容,但是当我去提交时,给我错误 CANNOT POST。创建功能工作正常,所以我的第一个想法是方法覆盖不起作用。如果我将 put 更改为 POST,一切正常。
如果有帮助,link 到包含此 app
的回购
根据文档判断,重写方法有两种常见的方式:
- 使用 a header;
- 使用 query string parameter;
您正在使用 "old" 指定表单变量的方法,您仍然可以使用该方法,但这需要在服务器端 custom logic。
在我看来,解决此问题的最简单方法是使用查询字符串参数:
<form action="/authors/{{_id}}?_method=put" method="post">
使用 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)
}
})
})
})
当我检查开发工具中的元素时,我看到了我需要看到的所有内容,但是当我去提交时,给我错误 CANNOT POST。创建功能工作正常,所以我的第一个想法是方法覆盖不起作用。如果我将 put 更改为 POST,一切正常。
如果有帮助,link 到包含此 app
的回购根据文档判断,重写方法有两种常见的方式:
- 使用 a header;
- 使用 query string parameter;
您正在使用 "old" 指定表单变量的方法,您仍然可以使用该方法,但这需要在服务器端 custom logic。
在我看来,解决此问题的最简单方法是使用查询字符串参数:
<form action="/authors/{{_id}}?_method=put" method="post">