expressJS的方法覆盖不适用于PUT隐藏方法HTML FORM

时间:2015-11-29 16:46:22

标签: mongodb express middleware method-overriding

使用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

的仓库

1 个答案:

答案 0 :(得分:3)

根据文档判断,有两种常用方法可以覆盖该方法:

您正在使用&#34; old&#34;指定表单变量的方法,您仍然可以使用它,但这需要服务器端custom logic

在我看来,解决此问题的最简单方法是使用查询字符串参数:

<form action="/authors/{{_id}}?_method=put" method="post">