是否可以从 express.js 中的路由器中提取前缀?

Is it possible to extract prefix from router in express.js?

我想知道是否可以从 express.js 中的路由器中提取前缀。

这是我的 index.js 文件:

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

const admin = require("./admin");
const home = require("./home");

router.use("/admin", admin);
router.use("/", home);

// Catch All Other Pages
router.get("*", (req, res) => {
  res.render("404", { title: "404 Not Found" });
});

module.exports = router;

这是我的管理路由文件:

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

router.get("/", function(req, res) {
  res.render("admin", { title: "Admin Menu" });
});

router.get("/settings", function(req, res) {
  res.render("admin/settings", { title: "Admin Menu | Settings" });
});

router.get("/logout", function(req, res) {
  //handle logout logic
  res.redirect("/");
});

module.exports = router;

在 index.js 文件中,我将前缀设置为“/admin”;

我能知道在 admin.js 文件中提取这个前缀吗? 例如:

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

// Require prefix
const prefix = router.getPrexix()?

router.get("/", function(req, res) {
  res.render("admin", { title: "Admin Menu", prefix });
});

router.get("/settings", function(req, res) {
  res.render("admin/settings", { title: "Admin Menu | Settings", prefix });
});

router.get("/logout", function(req, res) {
  //handle logout logic
  res.redirect("/");
});

module.exports = router;

可以吗? 我可以在哈巴狗模板中重复使用“/admin”。

在 Express 中,req.baseUrl 是安装路由器的 URL,在您的情况下是 "/admin"

并且,您有 req.path,这是路由匹配的内容。

而且,你有 req.originalUrl 是原始的 URL 所以你可以随时将它与以上任何一个结合使用以查看整个图片。

这里有一个小例子来说明:

const express = require('express');
const app = express();

const router = express.Router();

router.get("/new", (req, res) => {
    console.log("baseUrl", req.baseUrl);                // "/admin"
    console.log("path", req.path)                       // "/new"
    console.log("originalUrl", req.originalUrl);        // "/admin/new"
    res.send("new");
});

app.use("/admin", router);

app.listen(80);