簡體   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