You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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配置:

  1. 先安装依赖:npm install method-override
  2. 添加中间件和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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:02:20