【问题标题】:Some Express.Router() routes do not execute middleware function某些 Express.Router() 路由不执行中间件功能
【发布时间】:2021-09-07 13:41:33
【问题描述】:

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

app.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.js express


    【解决方案1】:

    您的路线定义在这里:

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

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

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

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

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

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

    【讨论】:

    • 成功了,非常感谢,需要对这些类型的路线进行更多研究。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 2020-09-16
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多