繁体   English   中英

一些 Express.Router() 路由不执行中间件功能

[英]Some Express.Router() routes do not execute middleware function

我试图围绕我的 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 响应。

我错过了什么大事吗?

谢谢 !

您的路线定义在这里:

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM