【问题标题】:Method override for expressJS not working for PUT hidden method HTML FORMexpressJS 的方法覆盖不适用于 PUT 隐藏方法 HTML FORM
【发布时间】:2015-11-29 16:46:22
【问题描述】:

使用 express 和 mongoose/mongo 创建一个 todo 应用。领域模型:作者有提醒。

在我的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,则一切正常。

如果有帮助,请链接到包含此 app 的存储库

【问题讨论】:

    标签: mongodb express middleware overriding


    【解决方案1】:

    从文档来看,有两种常见的方法覆盖方法:

    您正在使用指定表单变量的“旧”方法,您仍然可以使用该方法,但这需要在服务器端使用custom logic

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

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

    【讨论】:

    • 我尝试做查询字符串的方法得到了一个奇怪的结果,让我尝试重新创建。
    • Cannot POST /authors/565a5a74681a4a99ab7067a9?_method=put 是我收到的错误
    • 如果要编辑的文章以“?”结尾怎么办?或者 ”!” ?这样,方法覆盖不起作用。你知道任何解决方法吗?
    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多