首页 > 解决方案 > 某些 Express.Router() 路由不执行中间件功能

问题描述

我试图围绕我的 express.router() 实现而不是触发分配给它的中间件函数。我编写了一个相当大的应用程序并尝试在我的路径中添加更多端点,但由于某种原因,第 9 条路由被加载但没有触发该功能。

应用程序.js

server.use(cors());
server.use(function (req, res, next) {
  next();
});
server.use("/", express.static("./assets"));
server.use("/api", api);
server.use("/debug", debug);
server.use("/config", config);
server.use("/control", control);
server.use("/tools", files);

这就是我用各自的功能声明我的路线的地方。

router.get("/teams", onGetTeams);
router.get("/players", onGetPlayers);
router.get("/achievements", getTop3);
router.get("/xpression", onXprPayload);
router.get("/snapshot", onRequestSnapshot);
router.get("/round-timeline", onRequestTimelinePayload);
router.get("/:half", onRequestHalf);
router.get("/dashboard-message", onSetDashboardMessage);
router.get("/get-match-odds", getTeamOdds);
function getTeamOdds(req, res) {
  console.log("Sent odds");
  res.json(odds);
  res.end();
}

当我请求最后一条路由时,该函数没有被执行,我得到一个 200 响应。

我有什么大不了的吗?

谢谢 !

标签: node.jsexpress

解决方案


您的路线定义在这里:

router.get("/:half", onRequestHalf);

是一个匹配所有路由的通配符路由,因此它之后的任何路由都不会被调用,除非该特定路由调用next()以继续路由。

由于这个原因,顶级通配符路由是有问题的。我建议避免使用它们。有一些临时的解决方法,比如将它们的定义移动到最后一个顶级路由定义,但它们仍然可以限制定义未来的路由,因为它们太贪婪了。

我的建议是不要让它成为顶级路线:

router.get("/half/:half", onRequestHalf);

因此,它不会与其他顶级路由冲突,并且它本质上拥有自己的 URL 范围。


推荐阅读