javascript - 为什么在 Node.js 中使用方法覆盖包来隐藏字段?

标签 javascript node.js

我引用method-override NPM page中的最后一个例子。使用 PUT 或 DELETE 时需要设置隐藏字段。当代码在没有隐藏字段的情况下也能工作时,为什么会出现这种情况?

    <!-- enctype must be set to the type you will parse before methodOverride() -->
<form method="POST" action="/resource" enctype="application/x-www-form-urlencoded">
  <input type="hidden" name="_method" value="DELETE">
  <button type="submit">Delete resource</button>
</form>

我尝试了下面的代码,在没有隐藏字段的情况下也能正常工作:

<form action="/ideas/{{idea.id}}?_method=PUT" method="post">
  {{!-- <input type="hidden" name="_method" value="PUT"> --}}
    <div class="form-group">
      <label for="title">Title</label>
      <input type="text" class="form-control" name="title" value="{{idea.title}}" required>
    </div>
    <div class="form-group">
      <label for="details">Details</label>
      <textarea class="form-control" name="details" required>{{idea.details}}</textarea>
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
  </form>

更新:我的后端代码如下:

const methodOverride = require("method-override");
app.use(methodOverride("_method"));

app.put("/ideas/:id",(req,res) => {
  res.send("PUT");
})

无论是否使用隐藏字段,浏览器上都会显示“PUT”一词。

最佳答案

当您的表单将 ?_method=PUT 放入表单的操作 URL 中时,就会负责指定方法名称,而您无需将其放入隐藏的表单元素中。这就是为什么你的第二个表单工作得很好,因为它的 URL 中有这个。看来您可以将该方法放入 URL 或隐藏的表单元素中。

将其放入 URL 的文档是 here ,但该模块的总体文档相当糟糕,因此需要对代码进行一些检查(这也很令人困惑)才能确定发生了什么。

<小时/>

而且,在您的服务器代码中,您还告诉方法覆盖代码在 URL 或表单中查找 _method 键:

app.use(methodOverride("_method"));

关于javascript - 为什么在 Node.js 中使用方法覆盖包来隐藏字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51490268/

相关文章:

node.js - Heroku + socket.io 广播上的多个测功机

javascript - 如何将 RethinkDB 与 EmberJS 框架结合使用?

javascript - 单击事件不适用于 jquery 中动态更改的类

javascript - 同一页面上两个不同 Controller 的Angularjs双向绑定(bind)字段

javascript - 如何循环播放幻灯片上进度条的函数?

javascript - 如何在 puppeteer 中打印页面的控制台输出,就像它出现在浏览器中一样?

javascript - 解析服务器无法启动

javascript - Node.js 服务器阻止跨源请求

javascript - 按下按钮后添加动态表单字段

javascript - 如何循环请求 promise API 请求调用?