node.js - 某些 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 响应。
我有什么大不了的吗?
谢谢 !
解决方案
您的路线定义在这里:
router.get("/:half", onRequestHalf);
是一个匹配所有路由的通配符路由,因此它之后的任何路由都不会被调用,除非该特定路由调用next()
以继续路由。
由于这个原因,顶级通配符路由是有问题的。我建议避免使用它们。有一些临时的解决方法,比如将它们的定义移动到最后一个顶级路由定义,但它们仍然可以限制定义未来的路由,因为它们太贪婪了。
我的建议是不要让它成为顶级路线:
router.get("/half/:half", onRequestHalf);
因此,它不会与其他顶级路由冲突,并且它本质上拥有自己的 URL 范围。
推荐阅读
- c# - 在方法中标记未修改的类参数
- python - os.path.join() 可能存在的错误
- python - 如何在 python 中为雅虎财经修复新的无法读取 URL 错误
- javascript - 无法在 Safari 或 iOS 中使用 JavaScript 设置 Cookie
- python - Django 为 WebView 返回一个带有 TokenAuthentication 的视图
- java - 我们可以使用 contains() 方法在变量中查找数字吗?
- python - 在python中替换小花车
- sql - 从具有动态元素名称的 JSON 列中读取
- c# - Devart:System.TypeLoadException:方法未在类型中实现
- python - 如何设置一个按钮以删除由 MatPlotLib 中另一个按钮创建的线