我引用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/