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

Express根路由响应正常,子路由返回空响应问题排查

Express子路由无响应问题解决

问题现象

  • 根路由/请求正常,能返回「message sent」
  • /admin及其他自定义子路由请求返回空响应,服务器端对应路由内的日志代码未执行

问题根源

查看app.ts的代码顺序发现:app.listen()在挂载CORS中间件和路由之前执行。Express中,app.listen()会启动HTTP服务器,之后再挂载的中间件、路由不会被应用到已启动的服务器上,导致除启动前已挂载的路由外,后续路由都无法被匹配。

原错误代码(app.ts)

const app: Express = express();

const corsOptions:CorsOptions ={
  origin:['http://127.0.0.1:3000','http://localhost:3000'],
  methods:"*",
  allowedHeaders:'*'
}

const port = process.env.PORT || 8000;

app.use(express.json())

// 错误:先启动服务器,再挂载中间件和路由
app.listen(port, () => {
  console.log(`[server]: Server is running at http://localhost:${port}`);
});
app.use(cors(corsOptions))
app.use('/',router)

修复方案

将app.listen()移到所有中间件和路由挂载的最后,确保服务器启动前所有路由和中间件都已加载:

const app: Express = express();

const corsOptions:CorsOptions ={
  origin:['http://127.0.0.1:3000','http://localhost:3000'],
  methods:"*",
  allowedHeaders:'*'
}

const port = process.env.PORT || 8000;

// 先挂载中间件
app.use(express.json())
app.use(cors(corsOptions))
// 再挂载路由
app.use('/',router)

// 最后启动服务器
app.listen(port, () => {
  console.log(`[server]: Server is running at http://localhost:${port}`);
});

验证结果

重启Express服务器后:

  • 前端请求http://localhost:8000/admin/能正常拿到new token sent!响应
  • 服务器端会输出here日志
  • 其他自定义子路由也能正常响应

内容的提问来源于stack exchange,提问作者Ghazi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:06:10