Node.js点击删除超链接出现Cannot GET /delete/postid错误求助
解决删除功能的GET错误问题
方法一:直接修正GET请求代码(最简单)
你的代码里有三个明显问题:
- 路由参数获取错误:路由定义的是
:postid,所以req.params里的参数名是postid,不是postId findByIdAndDelete调用语法错误:回调函数不能嵌套在查询对象里,需单独作为第二个参数传入- a标签的
method="DELETE"无效,浏览器点击超链接只会发送GET请求,该属性可直接删除
修改后的app.js代码:
app.get('/delete/:postid', isLoggedIn, function(req, res) { const postId = req.params.postid; ProjectDetails.findByIdAndDelete(postId, function(err) { if (err) { console.log(err); } else { res.redirect('/main'); } }); });
修改后的main.ejs删除链接:
<a href="/delete/<%= post._id %>">Delete</a>
方法二:用表单模拟DELETE请求(更规范)
如果想贴合REST风格,又不想写复杂的前端JS,可以用表单实现:
修改main.ejs里的删除按钮:
把原来的a标签换成内联表单,用隐藏字段告诉服务器这是DELETE请求:
<% if (adminUser) { %> <form action="/delete/<%= post._id %>" method="POST" style="display:inline;"> <input type="hidden" name="_method" value="DELETE"> <button type="submit" style="border:none; background:none; color:blue; text-decoration:underline; cursor:pointer;">Delete</button> </form> <% } %>
修改app.js配置:
- 先安装依赖:
npm install method-override - 添加中间件和DELETE路由:
const methodOverride = require('method-override'); // 配置中间件识别表单里的_method字段 app.use(methodOverride('_method')); // 改用DELETE路由处理删除请求 app.delete('/delete/:postid', isLoggedIn, function(req, res) { const postId = req.params.postid; ProjectDetails.findByIdAndDelete(postId, function(err) { if (err) { console.log(err); } else { res.redirect('/main'); } }); });
内容的提问来源于stack exchange,提问作者Lex_X
相关产品推荐
相关产品推荐

