【问题标题】:Express route being "skipped" for next route下一条路线“跳过”快速路线
【发布时间】:2025-04-08 17:05:02
【问题描述】:

我的路由器设置如下:

app.js

global.express = require('express');
var app = express();
app.use(require('./server/routes/index'));

index.js

var router = express.Router();
router.use('/', require('./home.js'));
router.use('/inviteParticipants', require('./invite.js'));
module.exports = router;

邀请.js

var router = express.Router();
router.use('/route1', require('./route1.js'));
router.use('/route2', require('./route2.js'));
module.exports = router;

route1.js

var router = express.Router();
router.post('/:key', function(req, res, next) {
  // ..code
}
module.exports = router;

route2.js

var router = express.Router();
router.post('/:key', function(req, res, next) {
  // ..code
}
module.exports = router;

home.js

router.get('/', function(req, res, next) {
  // code
}

当同时向/inviteParticipants/route1inviteParticipants/route2 发出请求时,/route2 似乎捕获了这两个请求。

但是,如果我在invite.js 中注释掉router.use('/route2',...)/route1 会捕捉到它对应的路由,而原本用于路由route2 的路由只会返回404。

所以,route1 按预期工作,但是当route2 可用时,它似乎会捕获route1 请求。 route1 不使用 next() 呼叫,如果这很重要的话。我已经仔细检查了请求的路线,前往route1 的路线是正确的。

“跳过”route1 我在这里做错了什么?

【问题讨论】:

  • 好吧,没有看到路由器的所有定义以及每个路由器是如何创建和连接到 Express 中的,我无法真正理解什么是什么。只是没有足够的代码让我玩。
  • @jfriend00 好的,我在其中添加了更多代码。这就是你要找的吗?
  • 无法使用您发布的代码进行复制。
  • 我同意。我看不出有任何方法可以仅使用您显示的代码来重现您报告的内容。
  • 这是我的确切路由代码。还需要什么?

标签: node.js express


【解决方案1】:

每次写作

var router = express.Router();

您正在覆盖先前声明的路由器。您只是真正导出文件中最后声明的路由器。将它们重命名为

var routeOne = express.Router();

如果您需要导出多个路由器。

【讨论】:

  • 这些是单独的文件,而不是一个文件。我会提取文件名以使其更清楚。