0

我想知道是否可以从 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”。

4

1 回答 1

3

在 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);
于 2020-02-18T06:53:59.870 回答