浏览器发送DELETE请求返回Cannot GET错误,Postman正常,求助
问题
浏览器发送DELETE请求时报错,GET方法可正常执行跳转,Postman发送DELETE请求能得到正确结果。前端使用Handlebars,相关代码及错误信息如下:
删除路由控制器
exports.deleteProduct = async (req, res) => { try { const savedData = await CreateProduct.findOneAndDelete({_id: req.params.id }); res.redirect('/admin-panel/products'); } catch (error) { console.log(error); res.status(400).send(error); } }
删除路由配置
router.delete('/admin-panel/products/delete/:id',verifyJWT,getInfo,deleteProduct);
跳转目标路由
router.get('/admin-panel/products',verifyJWT,getInfo,renderProdutsPage)
错误信息
Cannot GET /admin-panel/products/delete/6342f2a5e8884cf054571479
解决方案
核心原因
浏览器地址栏访问或普通<a>标签默认发送GET请求,但你的服务器仅配置了DELETE方法的路由,因此触发Cannot GET错误。Postman可手动指定请求方法,所以能匹配路由;你提到GET方法可正常执行,本质是如果将路由改为GET能命中,但这不符合RESTful规范。
正确解决方式
1. 用表单+method-override发送DELETE请求(推荐)
HTML表单原生只支持GET/POST,需借助method-override中间件实现DELETE请求:
- 安装依赖:
npm install method-override
- 在Express应用中配置中间件:
const methodOverride = require('method-override'); // 允许通过表单字段覆盖请求方法 app.use(methodOverride('_method'));
- Handlebars模板中编写删除表单:
<form action="/admin-panel/products/delete/{{product._id}}" method="POST"> <input type="hidden" name="_method" value="DELETE"> <!-- 若需JWT验证,确保请求头或表单携带令牌 --> <button type="submit">删除产品</button> </form>
表单提交时,method-override会自动将POST请求转换为DELETE请求,匹配你的路由。
2. 异步AJAX请求方式
如果需要无刷新删除,可使用Fetch/Axios发送DELETE请求:
Fetch示例代码:
async function deleteProduct(productId) { try { const response = await fetch(`/admin-panel/products/delete/${productId}`, { method: 'DELETE', headers: { 'Authorization': `Bearer ${localStorage.getItem('jwtToken')}` // 携带JWT令牌 } }); if (response.ok) { window.location.href = '/admin-panel/products'; // 删除成功后跳转 } else { const errData = await response.json(); console.error('删除失败:', errData); } } catch (err) { console.error('请求出错:', err); } }
Handlebars模板绑定点击事件:
<button onclick="deleteProduct('{{product._id}}')">删除产品</button>
3. 临时兼容方案(不推荐)
若需快速测试,可添加GET路由,但这违反RESTful设计,易引发误操作(如爬虫触发删除):
router.get('/admin-panel/products/delete/:id',verifyJWT,getInfo,deleteProduct);
内容的提问来源于stack exchange,提问作者mahir
相关产品推荐
相关产品推荐

