【发布时间】:2020-07-24 14:57:32
【问题描述】:
我正在尝试将命名路由器功能添加到 NodeJS 的快速路由器(这是一种做法,我不想下载任何其他包),我已经成功了,但只剩下一件事.. . 路径,我的意思是,如果我有这样的路线:
index.js
const express = require('express');
const app = express();
app.use(require('./routes'));
routes/index.js
const express = require('express');
const expressRouter = express.Router();
const router = require("./namedRoutes")(expressRouter); // <- This is my own named router
const ViewsController = require('../app/controllers/ViewsController');
router.get("/", ViewsController.loadHome).setName("home");
router.get("/fromHome", ViewsController.loadHome).setName("fromHome");
module.exports = router;
我可以使用以下方法从我的助手(车把)获取路线名称:
{{ route "home" }} 或 {{ route "fromHome" }}
它还给我:
localhost:3000/ 或 localhost:3000/fromHome
但是当我尝试在 mi index.js
上使用此语法添加路径时app.use("/other/path", require('./routes'));
我的命名路线将再次返回localhost:3000/ 或localhost:3000/fromHome,但没有路径。
在我的路由助手中进行测试,我看到我可以从请求对象中获取所有注册的路由,这是仅注册一个对象路由的示例(这些路由对象位于req.app._router.stack 中的数组内部) :
Layer {
handle: [Function: router] {
params: {},
_params: [],
caseSensitive: undefined,
mergeParams: undefined,
strict: undefined,
stack: [Array],
_get: [Function],
_post: [Function],
_put: [Function],
_delete: [Function],
get: [Function],
post: [Function],
put: [Function],
delete: [Function],
setName: [Function],
lastRouteAdded: '/fromOthers',
names: [Array]
},
name: 'router',
params: undefined,
path: undefined,
keys: [],
regexp: /^\/other\/path\/?(?=\/|$)/i { fast_star: false, fast_slash: false },
route: undefined
}
如您所见,path 未定义,但如果您看到,有一个名为:
regexp: /^\/other\/path\/?(?=\/|$)/i { fast_star: false, fast_slash: false }
这是一个包含路径的正则表达式,所以如果我能得到那个正则表达式,我就能得到路径,但如果我尝试这样做,似乎没有办法得到它(假设 var @ 987654334@ 包含此 JSON 对象):
const path = routeInstance.regexp;
console.log(path);
我明白了:
/^\/other\/path\/?(?=\/|$)/i { fast_star: false, fast_slash: false }
但是现在我不能得到那个正则表达式,如果我这样做:
console.log(Object.keys(path));
我明白了:
[ 'fast_star', 'fast_slash' ]
如您所见,现在没有正则表达式,如果我这样做:
console.log(Object.keys(routeInstance));
(记住 var routeInstance 包含 Layer 对象)我明白了:
[
'handle', 'name',
'params', 'path',
'keys', 'regexp',
'route'
]
那么,我怎样才能得到那个正则表达式?或者如果有其他方法可以得到它,我怎么能得到它?
注意:
我知道app.use("/other/path", require('./routes')); 允许您放置一个正则表达式或数组而不是静态路径字符串,所以我的想法是route 帮助器根据过去的正则表达式返回最明显的路线。
感谢您的回复!!!
【问题讨论】:
标签: javascript node.js json express routes