CRUD应用中?_method=DELETE失效问题求助
排查
?_method=DELETE功能失效问题 最直接的问题:表单URL中的多余空格
看你表单的action属性:
<form method="POST" action="/comments/ <%= comment.id %>?_method=DELETE">
/comments/后面多了一个空格,导致实际请求的URL变成/comments/ [id]?_method=DELETE(比如id为1时就是/comments/ 1?_method=DELETE),而你的删除路由是/comments/:id,带空格的URL无法匹配到该路由,所以删除逻辑根本没执行,页面只是默认刷新/重定向到列表页。
修复方法:去掉/comments/后面的空格,修改为:
<form method="POST" action="/comments/<%= comment.id %>?_method=DELETE">
额外检查点(防止其他潜在问题)
- 确认中间件顺序:
method-override必须放在POST请求解析中间件(比如express.urlencoded())之后,否则无法读取到_method参数。如果你的代码里没配置body解析,需要补充:app.use(express.urlencoded({ extended: true })); // 之后再挂载method-override app.use(methodOverride("_method")); - 检查ID类型匹配:如果你的
comment.id是数字类型,而req.params.id是字符串,filter里的c.id !== id会因为类型不匹配导致过滤失败。可以统一类型:comments = comments.filter((c) => String(c.id) !== id); - 确认
comments变量的作用域:如果comments是局部变量,每次服务器重启或请求后数据会重置,看起来像删除没生效,但你说其他功能正常,这个可能性较低,可按需排查。
内容的提问来源于stack exchange,提问作者Tajh Johnson
相关产品推荐
相关产品推荐

