快递授权所有路线

Express authorizes all routes

我目前正在调试,我注意到 Express 授权所有具有参数的路由:

router.get(
  "/:type/:id",
  passport.authenticate("jwt", { session: false }),
  getOne
);

router.get("/my-search/:term", (req, res) => res.json({ hi: "joe" }));

router.get("/search/:term", search);

索引文件:

const express = require("express");
const router = express.Router();

const users = require("./users");
const movies = require("./movies");

router.use("/auth", users);
router.use("/movies", movies);

module.exports = router;

和server/root文件:

app.use("/api", routes);

如果我按预期删除 /:term 它 returns json。

Express 是否缓存路由或类似的东西。即使 'my-search' 路由也需要令牌。好像很奇怪。

问题是您的第一个处理程序中的 route 是动态的,但与您稍后定义的静态路由中的路由格式非常匹配。

JS 解释: my-searchsearch 作为 :type 的值 以及您作为 :id.

的值传入的 :term

重新排列路由处理程序可解决此问题,因为更具体的路径在顶部,而动态路径在底部。所以说,“search/ball”匹配第一个路由处理程序而不是最后一个。

router.get("/my-search/:term", (req, res) => res.json({ hi: "joe" }));

router.get("/search/:term", search);

router.get(
  "/:type/:id",
  passport.authenticate("jwt", { session: false }),
  getOne
);