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

Express Router GET请求正常但POST请求返回404问题

POST接口返回404但GET接口正常的原因及解决方法

问题场景

现有Express路由代码如下,其中/job-notify POST接口返回404未找到,但/job-appl-monitor GET接口可正常响应:

基础路由配置

const express = require('express');
const app = express();
const router = express.Router();
const bodyParser = require('body-parser');

// Parsers for POST data
router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: true }));

异常的POST接口

router.post('/job-notify', (req, res, next) => {
    res.send("NNN")
    console.log("NNN")
    next()
});

正常的GET接口

router.get('/job-appl-monitor', (req, res, next) => {
    console.log("MMM")
    res.send("MMM")
    next()
});

module.exports = router;

可能原因

  • 路由挂载前缀不匹配:主应用挂载路由时可能添加了前缀(如app.use('/api', router)),但请求时未携带该前缀,导致路径不匹配。
  • 请求URL拼写错误:POST请求的URL可能存在大小写、字符拼写错误(如写成/job_notify或/Job-Notify),与路由定义的路径不一致。
  • 中间件拦截:存在其他中间件(如权限校验、静态文件服务)在该路由之前拦截了POST请求,导致请求无法到达目标路由。
  • 请求方法错误:实际发送的请求并非POST方法(如误发GET请求到/job-notify),而该路径未定义GET路由,因此返回404。
  • 路由顺序问题:若存在通配符路由(如router.all('*', ...))定义在POST路由之前,可能提前匹配并阻断请求。

解决方法

  • 核对路由挂载前缀:检查主应用中挂载路由的代码,若使用了前缀(如app.use('/v1', router)),则POST请求的完整路径应为/v1/job-notify,确保请求路径包含正确前缀。
  • 校验请求URL:严格对比请求URL与路由定义的/job-notify,确保大小写、字符完全一致。
  • 调整中间件顺序:确保路由中间件在静态文件中间件之后、错误处理中间件之前挂载,避免被其他中间件提前拦截。
  • 确认请求方法:使用curl或API测试工具验证请求方法为POST,例如执行:
    curl -X POST http://localhost:3000/job-notify
    
  • 调整路由顺序:将通配符路由移至所有具体路由的末尾,避免提前匹配覆盖目标路由。

内容的提问来源于stack exchange,提问作者فوزي الصويمل Fawzi Alswaimil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:05:24